From 989914670db13f942c5e932a3e9774fb61cc4ee2 Mon Sep 17 00:00:00 2001 From: Faidon Liambotis Date: Tue, 16 May 2023 17:01:51 +0200 Subject: [PATCH 1/2] Add GNU/Hurd support in configure.ac --- configure.ac | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/configure.ac b/configure.ac index 5b18fd34..75425464 100644 --- a/configure.ac +++ b/configure.ac @@ -760,6 +760,15 @@ case "${host}" in AC_DEFINE([JEMALLOC_THREADED_INIT], [ ], [ ]) AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ], [ ]) ;; + *-*-gnu*) + dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE. + JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE) + JE_APPEND_VS(CPPFLAGS, -DPATH_MAX=8192) + abi="elf" + AC_DEFINE([JEMALLOC_HAS_ALLOCA_H]) + AC_DEFINE([JEMALLOC_THREADED_INIT], [ ]) + AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ]) + ;; *-*-netbsd*) AC_MSG_CHECKING([ABI]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM( From 17ae5b5747beca7f0558823fe61857ee9b12aed9 Mon Sep 17 00:00:00 2001 From: Faidon Liambotis Date: Tue, 16 May 2023 17:03:44 +0200 Subject: [PATCH 2/2] Also check for pthread_getaffinity_np GNU/Hurd has the cpuset types and macros, but no pthread_getaffinity_np yet. --- configure.ac | 9 +++++++++ src/background_thread.c | 8 ++++++-- src/jemalloc.c | 10 ++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 75425464..8309be4a 100644 --- a/configure.ac +++ b/configure.ac @@ -1963,6 +1963,15 @@ dnl Check if we have dlsym support. fi fi +dnl Check if pthread_getaffinity_np exists (does not on GNU Hurd) +AC_CHECK_FUNC([pthread_getaffinity_np], + [have_pthread_getaffinity_np="1"], + [have_pthread_getaffinity_np="0"] + ) +if test "x$have_pthread_getaffinity_np" = "x1" ; then + AC_DEFINE([JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP], [ ]) +fi + JE_APPEND_VS(CPPFLAGS, -D_REENTRANT) dnl Check whether clock_gettime(2) is in libc or librt. diff --git a/src/background_thread.c b/src/background_thread.c index 1d5bde6c..25cc141d 100644 --- a/src/background_thread.c +++ b/src/background_thread.c @@ -116,7 +116,7 @@ set_current_thread_affinity(int cpu) { #if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) || defined(JEMALLOC_HAVE_PTHREAD_SETAFFINITY_NP) #if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) cpu_set_t cpuset; -#else +#elif defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) # ifndef __NetBSD__ cpuset_t cpuset; # else @@ -124,16 +124,20 @@ set_current_thread_affinity(int cpu) { # endif #endif +#if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) || defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) #ifndef __NetBSD__ CPU_ZERO(&cpuset); CPU_SET(cpu, &cpuset); #else cpuset = cpuset_create(); #endif +#else + return 1; +#endif #if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) return (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset) != 0); -#else +#elif defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) # ifndef __NetBSD__ int ret = pthread_setaffinity_np(pthread_self(), sizeof(cpuset_t), &cpuset); diff --git a/src/jemalloc.c b/src/jemalloc.c index 37cd159c..736e2e50 100644 --- a/src/jemalloc.c +++ b/src/jemalloc.c @@ -747,8 +747,11 @@ malloc_ncpus(void) { # endif # if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) sched_getaffinity(0, sizeof(set), &set); -# else +# elif defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) pthread_getaffinity_np(pthread_self(), sizeof(set), &set); +# else + CPU_ZERO(&set); + CPU_SET(0, &set); # endif result = CPU_COUNT(&set); } @@ -784,8 +787,11 @@ malloc_cpu_count_is_deterministic() # endif /* __FreeBSD__ */ # if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) sched_getaffinity(0, sizeof(set), &set); -# else /* !JEMALLOC_HAVE_SCHED_SETAFFINITY */ +# elif defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) pthread_getaffinity_np(pthread_self(), sizeof(set), &set); +# else + CPU_ZERO(&set); + CPU_SET(0, &set); # endif /* JEMALLOC_HAVE_SCHED_SETAFFINITY */ long cpu_affinity = CPU_COUNT(&set); if (cpu_affinity != cpu_conf) {