* [Buildroot] [PATCH 1/1] package/jemalloc: Fix build with gcc 16.x
@ 2026-09-16 8:56 Bernd Kuhls
2026-09-20 13:42 ` Thomas Petazzoni via buildroot
2026-09-25 14:45 ` Raphaël Mélotte via buildroot
0 siblings, 2 replies; 3+ messages in thread
From: Bernd Kuhls @ 2026-09-16 8:56 UTC (permalink / raw)
To: buildroot; +Cc: Eric Le Bihan
Fixes:
https://autobuild.buildroot.net/results/6fb/6fbebb76cb0e6cafabad0890b8df226e9358a6c3/
Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
---
.../0001-Replace-std-__throw_bad_alloc.patch | 160 ++++++++++++++++++
package/jemalloc/jemalloc.mk | 2 +
2 files changed, 162 insertions(+)
create mode 100644 package/jemalloc/0001-Replace-std-__throw_bad_alloc.patch
diff --git a/package/jemalloc/0001-Replace-std-__throw_bad_alloc.patch b/package/jemalloc/0001-Replace-std-__throw_bad_alloc.patch
new file mode 100644
index 0000000000..6bb61ba117
--- /dev/null
+++ b/package/jemalloc/0001-Replace-std-__throw_bad_alloc.patch
@@ -0,0 +1,160 @@
+From 1a15fe33a48c52bfe26ea83e49f0d317a47da3ea Mon Sep 17 00:00:00 2001
+From: lexprfuncall <cshapiro@meta.com>
+Date: Mon, 27 Apr 2026 11:50:27 -0700
+Subject: [PATCH] Replace std::__throw_bad_alloc call with standard C++ (#2900)
+
+* Replace std::__throw_bad_alloc call with standard C++
+
+Since December of 2025, std::__throw_bad_alloc is no longer visible
+through #include <new> causing jemalloc build failures with gcc 16.
+As far as I can tell, all std::__throw_bad_alloc did was arrange to
+raise a std::bad_alloc exception if exceptions are enabled. I am not
+sure whether its usage was truly meaningful in jemalloc since the call
+is wrapped in a try catch and any usage of try catch is considered an
+error when compiling with -fno-exceptions on gcc, at least.
+
+This change adds a check to configure.ac that determines whether
+exceptions are enabled by compiling a simple try catch that raises a
+std::bad_alloc exception. If that test succeeds, the macro
+JEMALLOC_HAVE_CXX_EXCEPTIONS is defined, and jemalloc will raise an
+exception. Otherwise, we call std::terminate() to abort.
+
+This was tested on FreeBSD with the gcc16 port with and without exceptions
+enabled.
+
+* Replace std::set_new_handler calls with std::get_new_handler
+
+Previously, std::set_new_handler was used as a workaround for
+compilers with only partial support for C++11. Now that C++14 is a
+requirement to enable C++ support, we can assume std::get_new_handler
+is available.
+
+Upstream: https://github.com/jemalloc/jemalloc/commit/1a15fe33a48c52bfe26ea83e49f0d317a47da3ea
+
+Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
+---
+ Makefile.in | 6 +++--
+ configure.ac | 23 +++++++++++++++++
+ .../internal/jemalloc_internal_defs.h.in | 3 +++
+ src/jemalloc_cpp.cpp | 25 ++++++++++---------
+ 4 files changed, 43 insertions(+), 14 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index a93048d7b8..1f9d14f1f2 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -337,9 +337,11 @@ TESTS_INTEGRATION += \
+ endif
+ ifeq (@enable_cxx@, 1)
+ CPP_SRCS := $(srcroot)src/jemalloc_cpp.cpp
+-TESTS_INTEGRATION_CPP := $(srcroot)test/integration/cpp/basic.cpp \
+- $(srcroot)test/integration/cpp/infallible_new_true.cpp \
++TESTS_INTEGRATION_CPP := $(srcroot)test/integration/cpp/basic.cpp
++ifeq (@enable_cxx_exceptions@, 1)
++TESTS_INTEGRATION_CPP += $(srcroot)test/integration/cpp/infallible_new_true.cpp \
+ $(srcroot)test/integration/cpp/infallible_new_false.cpp
++endif
+ else
+ CPP_SRCS :=
+ TESTS_INTEGRATION_CPP :=
+diff --git a/configure.ac b/configure.ac
+index 321a729012..d151829832 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -374,7 +374,30 @@ fi
+ if test "x$enable_cxx" = "x1"; then
+ AC_DEFINE([JEMALLOC_ENABLE_CXX], [ ], [ ])
+ fi
++if test "x$enable_cxx" = "x1"; then
++ dnl Now check whether the C++ compiler has exceptions enabled.
++ AC_LANG_PUSH([C++])
++ SAVED_CXXFLAGS="${CXXFLAGS}"
++ CXXFLAGS="${CXXFLAGS} ${EXTRA_CXXFLAGS}"
++ JE_COMPILABLE([C++ exception support], [
++#include <new>
++], [
++ try {
++ throw std::bad_alloc();
++ } catch (const std::bad_alloc &) {
++ }
++], [je_cv_cxx_exceptions])
++ CXXFLAGS="${SAVED_CXXFLAGS}"
++ AC_LANG_POP([C++])
++ if test "x${je_cv_cxx_exceptions}" = "xyes" ; then
++ AC_DEFINE([JEMALLOC_HAVE_CXX_EXCEPTIONS], [ ], [ ])
++ enable_cxx_exceptions="1"
++ else
++ enable_cxx_exceptions="0"
++ fi
++fi
+ AC_SUBST([enable_cxx])
++AC_SUBST([enable_cxx_exceptions])
+ AC_SUBST([CONFIGURE_CXXFLAGS])
+ AC_SUBST([SPECIFIED_CXXFLAGS])
+ AC_SUBST([EXTRA_CXXFLAGS])
+diff --git a/include/jemalloc/internal/jemalloc_internal_defs.h.in b/include/jemalloc/internal/jemalloc_internal_defs.h.in
+index 31ae2e8ed2..54d4da2032 100644
+--- a/include/jemalloc/internal/jemalloc_internal_defs.h.in
++++ b/include/jemalloc/internal/jemalloc_internal_defs.h.in
+@@ -465,6 +465,9 @@
+ /* Is C++ support being built? */
+ #undef JEMALLOC_ENABLE_CXX
+
++/* Are C++ exceptions enabled? */
++#undef JEMALLOC_HAVE_CXX_EXCEPTIONS
++
+ /* Performs additional size checks when defined. */
+ #undef JEMALLOC_OPT_SIZE_CHECKS
+
+diff --git a/src/jemalloc_cpp.cpp b/src/jemalloc_cpp.cpp
+index 4e838d3b51..ac109bb28e 100644
+--- a/src/jemalloc_cpp.cpp
++++ b/src/jemalloc_cpp.cpp
+@@ -1,4 +1,4 @@
+-#include <mutex>
++#include <exception>
+ #include <new>
+ // NOLINTBEGIN(misc-use-anonymous-namespace)
+
+@@ -78,29 +78,30 @@ handleOOM(std::size_t size, bool nothrow) {
+ void *ptr = nullptr;
+
+ while (ptr == nullptr) {
+- std::new_handler handler;
+- // GCC-4.8 and clang 4.0 do not have std::get_new_handler.
+- {
+- static std::mutex mtx;
+- std::lock_guard<std::mutex> lock(mtx);
+-
+- handler = std::set_new_handler(nullptr);
+- std::set_new_handler(handler);
+- }
++ std::new_handler handler = std::get_new_handler();
+ if (handler == nullptr)
+ break;
+
++#ifdef JEMALLOC_HAVE_CXX_EXCEPTIONS
+ try {
+ handler();
+ } catch (const std::bad_alloc &) {
+ break;
+ }
++#else
++ handler();
++#endif
+
+ ptr = je_malloc(size);
+ }
+
+- if (ptr == nullptr && !nothrow)
+- std::__throw_bad_alloc();
++ if (ptr == nullptr && !nothrow) {
++#ifdef JEMALLOC_HAVE_CXX_EXCEPTIONS
++ throw std::bad_alloc();
++#else
++ std::terminate();
++#endif
++ }
+ return ptr;
+ }
+
diff --git a/package/jemalloc/jemalloc.mk b/package/jemalloc/jemalloc.mk
index 61045c50d5..8ac661b9d5 100644
--- a/package/jemalloc/jemalloc.mk
+++ b/package/jemalloc/jemalloc.mk
@@ -9,6 +9,8 @@ JEMALLOC_SOURCE = jemalloc-$(JEMALLOC_VERSION).tar.bz2
JEMALLOC_SITE = https://github.com/jemalloc/jemalloc/releases/download/$(JEMALLOC_VERSION)
JEMALLOC_LICENSE = BSD-2-Clause
JEMALLOC_LICENSE_FILES = COPYING
+# 0001-Replace-std-__throw_bad_alloc.patch
+JEMALLOC_AUTORECONF = YES
JEMALLOC_INSTALL_STAGING = YES
JEMALLOC_CONFIG_SCRIPTS = jemalloc-config
--
2.47.3
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [Buildroot] [PATCH 1/1] package/jemalloc: Fix build with gcc 16.x
2026-09-16 8:56 [Buildroot] [PATCH 1/1] package/jemalloc: Fix build with gcc 16.x Bernd Kuhls
@ 2026-09-20 13:42 ` Thomas Petazzoni via buildroot
2026-09-25 14:45 ` Raphaël Mélotte via buildroot
1 sibling, 0 replies; 3+ messages in thread
From: Thomas Petazzoni via buildroot @ 2026-09-20 13:42 UTC (permalink / raw)
To: Bernd Kuhls; +Cc: buildroot, Eric Le Bihan
On Wed, Sep 16, 2026 at 10:56:48AM +0200, Bernd Kuhls wrote:
> Fixes:
> https://autobuild.buildroot.net/results/6fb/6fbebb76cb0e6cafabad0890b8df226e9358a6c3/
>
> Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
Applied to master, thanks!
Best regards,
Thomas Petazzoni
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Buildroot] [PATCH 1/1] package/jemalloc: Fix build with gcc 16.x
2026-09-16 8:56 [Buildroot] [PATCH 1/1] package/jemalloc: Fix build with gcc 16.x Bernd Kuhls
2026-09-20 13:42 ` Thomas Petazzoni via buildroot
@ 2026-09-25 14:45 ` Raphaël Mélotte via buildroot
1 sibling, 0 replies; 3+ messages in thread
From: Raphaël Mélotte via buildroot @ 2026-09-25 14:45 UTC (permalink / raw)
To: buildroot, Bernd Kuhls; +Cc: Raphaël Mélotte
In reply of:
> Fixes:
> https://autobuild.buildroot.net/results/6fb/6fbebb76cb0e6cafabad0890b8df226e9358a6c3/
>
> Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
Applied to 2026.08.x. Thanks
> ---
> .../0001-Replace-std-__throw_bad_alloc.patch | 160 ++++++++++++++++++
> package/jemalloc/jemalloc.mk | 2 +
> 2 files changed, 162 insertions(+)
> create mode 100644 package/jemalloc/0001-Replace-std-__throw_bad_alloc.patch
>
> diff --git a/package/jemalloc/0001-Replace-std-__throw_bad_alloc.patch b/package/jemalloc/0001-Replace-std-__throw_bad_alloc.patch
> new file mode 100644
> index 0000000000..6bb61ba117
> --- /dev/null
> +++ b/package/jemalloc/0001-Replace-std-__throw_bad_alloc.patch
> @@ -0,0 +1,160 @@
> +From 1a15fe33a48c52bfe26ea83e49f0d317a47da3ea Mon Sep 17 00:00:00 2001
> +From: lexprfuncall <cshapiro@meta.com>
> +Date: Mon, 27 Apr 2026 11:50:27 -0700
> +Subject: [PATCH] Replace std::__throw_bad_alloc call with standard C++ (#2900)
> +
> +* Replace std::__throw_bad_alloc call with standard C++
> +
> +Since December of 2025, std::__throw_bad_alloc is no longer visible
> +through #include <new> causing jemalloc build failures with gcc 16.
> +As far as I can tell, all std::__throw_bad_alloc did was arrange to
> +raise a std::bad_alloc exception if exceptions are enabled. I am not
> +sure whether its usage was truly meaningful in jemalloc since the call
> +is wrapped in a try catch and any usage of try catch is considered an
> +error when compiling with -fno-exceptions on gcc, at least.
> +
> +This change adds a check to configure.ac that determines whether
> +exceptions are enabled by compiling a simple try catch that raises a
> +std::bad_alloc exception. If that test succeeds, the macro
> +JEMALLOC_HAVE_CXX_EXCEPTIONS is defined, and jemalloc will raise an
> +exception. Otherwise, we call std::terminate() to abort.
> +
> +This was tested on FreeBSD with the gcc16 port with and without exceptions
> +enabled.
> +
> +* Replace std::set_new_handler calls with std::get_new_handler
> +
> +Previously, std::set_new_handler was used as a workaround for
> +compilers with only partial support for C++11. Now that C++14 is a
> +requirement to enable C++ support, we can assume std::get_new_handler
> +is available.
> +
> +Upstream: https://github.com/jemalloc/jemalloc/commit/1a15fe33a48c52bfe26ea83e49f0d317a47da3ea
> +
> +Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
> +---
> + Makefile.in | 6 +++--
> + configure.ac | 23 +++++++++++++++++
> + .../internal/jemalloc_internal_defs.h.in | 3 +++
> + src/jemalloc_cpp.cpp | 25 ++++++++++---------
> + 4 files changed, 43 insertions(+), 14 deletions(-)
> +
> +diff --git a/Makefile.in b/Makefile.in
> +index a93048d7b8..1f9d14f1f2 100644
> +--- a/Makefile.in
> ++++ b/Makefile.in
> +@@ -337,9 +337,11 @@ TESTS_INTEGRATION += \
> + endif
> + ifeq (@enable_cxx@, 1)
> + CPP_SRCS := $(srcroot)src/jemalloc_cpp.cpp
> +-TESTS_INTEGRATION_CPP := $(srcroot)test/integration/cpp/basic.cpp \
> +- $(srcroot)test/integration/cpp/infallible_new_true.cpp \
> ++TESTS_INTEGRATION_CPP := $(srcroot)test/integration/cpp/basic.cpp
> ++ifeq (@enable_cxx_exceptions@, 1)
> ++TESTS_INTEGRATION_CPP += $(srcroot)test/integration/cpp/infallible_new_true.cpp \
> + $(srcroot)test/integration/cpp/infallible_new_false.cpp
> ++endif
> + else
> + CPP_SRCS :=
> + TESTS_INTEGRATION_CPP :=
> +diff --git a/configure.ac b/configure.ac
> +index 321a729012..d151829832 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -374,7 +374,30 @@ fi
> + if test "x$enable_cxx" = "x1"; then
> + AC_DEFINE([JEMALLOC_ENABLE_CXX], [ ], [ ])
> + fi
> ++if test "x$enable_cxx" = "x1"; then
> ++ dnl Now check whether the C++ compiler has exceptions enabled.
> ++ AC_LANG_PUSH([C++])
> ++ SAVED_CXXFLAGS="${CXXFLAGS}"
> ++ CXXFLAGS="${CXXFLAGS} ${EXTRA_CXXFLAGS}"
> ++ JE_COMPILABLE([C++ exception support], [
> ++#include <new>
> ++], [
> ++ try {
> ++ throw std::bad_alloc();
> ++ } catch (const std::bad_alloc &) {
> ++ }
> ++], [je_cv_cxx_exceptions])
> ++ CXXFLAGS="${SAVED_CXXFLAGS}"
> ++ AC_LANG_POP([C++])
> ++ if test "x${je_cv_cxx_exceptions}" = "xyes" ; then
> ++ AC_DEFINE([JEMALLOC_HAVE_CXX_EXCEPTIONS], [ ], [ ])
> ++ enable_cxx_exceptions="1"
> ++ else
> ++ enable_cxx_exceptions="0"
> ++ fi
> ++fi
> + AC_SUBST([enable_cxx])
> ++AC_SUBST([enable_cxx_exceptions])
> + AC_SUBST([CONFIGURE_CXXFLAGS])
> + AC_SUBST([SPECIFIED_CXXFLAGS])
> + AC_SUBST([EXTRA_CXXFLAGS])
> +diff --git a/include/jemalloc/internal/jemalloc_internal_defs.h.in b/include/jemalloc/internal/jemalloc_internal_defs.h.in
> +index 31ae2e8ed2..54d4da2032 100644
> +--- a/include/jemalloc/internal/jemalloc_internal_defs.h.in
> ++++ b/include/jemalloc/internal/jemalloc_internal_defs.h.in
> +@@ -465,6 +465,9 @@
> + /* Is C++ support being built? */
> + #undef JEMALLOC_ENABLE_CXX
> +
> ++/* Are C++ exceptions enabled? */
> ++#undef JEMALLOC_HAVE_CXX_EXCEPTIONS
> ++
> + /* Performs additional size checks when defined. */
> + #undef JEMALLOC_OPT_SIZE_CHECKS
> +
> +diff --git a/src/jemalloc_cpp.cpp b/src/jemalloc_cpp.cpp
> +index 4e838d3b51..ac109bb28e 100644
> +--- a/src/jemalloc_cpp.cpp
> ++++ b/src/jemalloc_cpp.cpp
> +@@ -1,4 +1,4 @@
> +-#include <mutex>
> ++#include <exception>
> + #include <new>
> + // NOLINTBEGIN(misc-use-anonymous-namespace)
> +
> +@@ -78,29 +78,30 @@ handleOOM(std::size_t size, bool nothrow) {
> + void *ptr = nullptr;
> +
> + while (ptr == nullptr) {
> +- std::new_handler handler;
> +- // GCC-4.8 and clang 4.0 do not have std::get_new_handler.
> +- {
> +- static std::mutex mtx;
> +- std::lock_guard<std::mutex> lock(mtx);
> +-
> +- handler = std::set_new_handler(nullptr);
> +- std::set_new_handler(handler);
> +- }
> ++ std::new_handler handler = std::get_new_handler();
> + if (handler == nullptr)
> + break;
> +
> ++#ifdef JEMALLOC_HAVE_CXX_EXCEPTIONS
> + try {
> + handler();
> + } catch (const std::bad_alloc &) {
> + break;
> + }
> ++#else
> ++ handler();
> ++#endif
> +
> + ptr = je_malloc(size);
> + }
> +
> +- if (ptr == nullptr && !nothrow)
> +- std::__throw_bad_alloc();
> ++ if (ptr == nullptr && !nothrow) {
> ++#ifdef JEMALLOC_HAVE_CXX_EXCEPTIONS
> ++ throw std::bad_alloc();
> ++#else
> ++ std::terminate();
> ++#endif
> ++ }
> + return ptr;
> + }
> +
> diff --git a/package/jemalloc/jemalloc.mk b/package/jemalloc/jemalloc.mk
> index 61045c50d5..8ac661b9d5 100644
> --- a/package/jemalloc/jemalloc.mk
> +++ b/package/jemalloc/jemalloc.mk
> @@ -9,6 +9,8 @@ JEMALLOC_SOURCE = jemalloc-$(JEMALLOC_VERSION).tar.bz2
> JEMALLOC_SITE = https://github.com/jemalloc/jemalloc/releases/download/$(JEMALLOC_VERSION)
> JEMALLOC_LICENSE = BSD-2-Clause
> JEMALLOC_LICENSE_FILES = COPYING
> +# 0001-Replace-std-__throw_bad_alloc.patch
> +JEMALLOC_AUTORECONF = YES
> JEMALLOC_INSTALL_STAGING = YES
> JEMALLOC_CONFIG_SCRIPTS = jemalloc-config
>
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-09-25 14:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-16 8:56 [Buildroot] [PATCH 1/1] package/jemalloc: Fix build with gcc 16.x Bernd Kuhls
2026-09-20 13:42 ` Thomas Petazzoni via buildroot
2026-09-25 14:45 ` Raphaël Mélotte via buildroot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox