From b260c71fa5f903606dcc491a38069fbef87baa05 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 4 Nov 2012 22:56:02 +0000 Subject: [PATCH] configure.ac: Add stanza for *-*-gnu* threads configuration. boehm-gc/ * configure.ac: Add stanza for *-*-gnu* threads configuration. * configure: Regenerate. * include/gc_config.h.in: Likewise. * dyn_load.c (_GNU_SOURCE): Define for __GNU__. * include/gc_config_macros.h (_REENTRANT, GC_PTHREADS): Define for GC_GNU_THREADS. * include/private/gcconfig.h (DATASTART): Don't define for I386 && HURD. (SIG_SUSPEND, SIG_THR_RESTART, SEARCH_FOR_DATA_START): Define for I386 && HURD. (UNIX_LIKE, REGISTER_LIBRARIES_EARLY): Define for HURD. * os_dep.c (GC_init_linux_data_start): Handle for HURD. * pthread_support.c (GC_thr_init): Add case for GC_GNU_THREADS. * specific.c: Use for GC_GNU_THREADS. * threadlibs.c: Add case for GC_GNU_THREADS. From-SVN: r193142 --- boehm-gc/ChangeLog | 18 ++++++++++++++++++ boehm-gc/configure | 9 +++++++++ boehm-gc/configure.ac | 5 +++++ boehm-gc/dyn_load.c | 3 ++- boehm-gc/include/gc_config.h.in | 3 +++ boehm-gc/include/gc_config_macros.h | 4 +++- boehm-gc/include/private/gcconfig.h | 13 +++++++++---- boehm-gc/os_dep.c | 4 ++-- boehm-gc/pthread_support.c | 2 +- boehm-gc/specific.c | 2 +- boehm-gc/threadlibs.c | 3 ++- 11 files changed, 55 insertions(+), 11 deletions(-) diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 57359f0beaf..7759258ab33 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,21 @@ +2012-11-04 Samuel Thibault + + * configure.ac: Add stanza for *-*-gnu* threads configuration. + * configure: Regenerate. + * include/gc_config.h.in: Likewise. + * dyn_load.c (_GNU_SOURCE): Define for __GNU__. + * include/gc_config_macros.h (_REENTRANT, GC_PTHREADS): Define for + GC_GNU_THREADS. + * include/private/gcconfig.h (DATASTART): Don't define for I386 && + HURD. + (SIG_SUSPEND, SIG_THR_RESTART, SEARCH_FOR_DATA_START): Define for + I386 && HURD. + (UNIX_LIKE, REGISTER_LIBRARIES_EARLY): Define for HURD. + * os_dep.c (GC_init_linux_data_start): Handle for HURD. + * pthread_support.c (GC_thr_init): Add case for GC_GNU_THREADS. + * specific.c: Use for GC_GNU_THREADS. + * threadlibs.c: Add case for GC_GNU_THREADS. + 2012-09-14 David Edelsohn * configure: Regenerated. diff --git a/boehm-gc/configure b/boehm-gc/configure index 1d751fd684f..6020e9884eb 100755 --- a/boehm-gc/configure +++ b/boehm-gc/configure @@ -14796,6 +14796,15 @@ $as_echo "$as_me: WARNING: \"Only HP-UX 11 POSIX threads are supported.\"" >&2;} $as_echo "#define USE_COMPILER_TLS 1" >>confdefs.h ;; + *-*-gnu*) + +$as_echo "#define GC_GNU_THREADS 1" >>confdefs.h + + $as_echo "#define _REENTRANT 1" >>confdefs.h + + $as_echo "#define THREAD_LOCAL_ALLOC 1" >>confdefs.h + + ;; *-*-freebsd*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&5 $as_echo "$as_me: WARNING: \"FreeBSD does not yet fully support threads with Boehm GC.\"" >&2;} diff --git a/boehm-gc/configure.ac b/boehm-gc/configure.ac index 2eddc9fe7ab..1ccfe37e9d8 100644 --- a/boehm-gc/configure.ac +++ b/boehm-gc/configure.ac @@ -175,6 +175,11 @@ case "$THREADS" in AC_DEFINE(THREAD_LOCAL_ALLOC) AC_DEFINE(USE_COMPILER_TLS, 1,[use tls for boehm]) ;; + *-*-gnu*) + AC_DEFINE(GC_GNU_THREADS,1,[support GNU threads]) + AC_DEFINE(_REENTRANT) + AC_DEFINE(THREAD_LOCAL_ALLOC) + ;; *-*-freebsd*) AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.") AC_DEFINE(GC_FREEBSD_THREADS,1,[support FreeBSD threads]) diff --git a/boehm-gc/dyn_load.c b/boehm-gc/dyn_load.c index f1e3e8ec74f..eac2e71673f 100644 --- a/boehm-gc/dyn_load.c +++ b/boehm-gc/dyn_load.c @@ -26,7 +26,8 @@ * None of this is safe with dlclose and incremental collection. * But then not much of anything is safe in the presence of dlclose. */ -#if (defined(__linux__) || defined(__GLIBC__)) && !defined(_GNU_SOURCE) +#if (defined(__linux__) || defined(__GLIBC__) || defined(__GNU__)) \ + && !defined(_GNU_SOURCE) /* Can't test LINUX, since this must be define before other includes */ # define _GNU_SOURCE #endif diff --git a/boehm-gc/include/gc_config.h.in b/boehm-gc/include/gc_config.h.in index 6bdd807bcfa..d1ae47d88f4 100644 --- a/boehm-gc/include/gc_config.h.in +++ b/boehm-gc/include/gc_config.h.in @@ -33,6 +33,9 @@ /* include support for gcj */ #undef GC_GCJ_SUPPORT +/* support GNU threads */ +#undef GC_GNU_THREADS + /* enables support for HP/UX 11 pthreads */ #undef GC_HPUX_THREADS diff --git a/boehm-gc/include/gc_config_macros.h b/boehm-gc/include/gc_config_macros.h index 12e91e27f5e..fd3006c1789 100644 --- a/boehm-gc/include/gc_config_macros.h +++ b/boehm-gc/include/gc_config_macros.h @@ -6,7 +6,8 @@ || defined(GC_SOLARIS_PTHREADS) \ || defined(GC_HPUX_THREADS) \ || defined(GC_AIX_THREADS) \ - || defined(GC_LINUX_THREADS)) + || defined(GC_LINUX_THREADS) \ + || defined(GC_GNU_THREADS)) # define _REENTRANT /* Better late than never. This fails if system headers that */ /* depend on this were previously included. */ @@ -18,6 +19,7 @@ # if defined(GC_SOLARIS_PTHREADS) || defined(GC_FREEBSD_THREADS) || \ defined(GC_IRIX_THREADS) || defined(GC_LINUX_THREADS) || \ + defined(GC_GNU_THREADS) || \ defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \ defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \ defined(GC_AIX_THREADS) || \ diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h index 0263c13fd88..594ce431e02 100644 --- a/boehm-gc/include/private/gcconfig.h +++ b/boehm-gc/include/private/gcconfig.h @@ -1316,8 +1316,9 @@ # define OS_TYPE "HURD" # define STACK_GROWS_DOWN # define HEURISTIC2 - extern int __data_start[]; -# define DATASTART ( (ptr_t) (__data_start)) +# define SIG_SUSPEND SIGUSR1 +# define SIG_THR_RESTART SIGUSR2 +# define SEARCH_FOR_DATA_START extern int _end[]; # define DATAEND ( (ptr_t) (_end)) /* # define MPROTECT_VDB Not quite working yet? */ @@ -2169,7 +2170,8 @@ # if defined(SVR4) || defined(LINUX) || defined(IRIX5) || defined(HPUX) \ || defined(OPENBSD) || defined(NETBSD) || defined(FREEBSD) \ || defined(DGUX) || defined(BSD) || defined(SUNOS4) \ - || defined(_AIX) || defined(DARWIN) || defined(OSF1) + || defined(_AIX) || defined(DARWIN) || defined(OSF1) \ + || defined(HURD) # define UNIX_LIKE /* Basic Unix-like system calls work. */ # endif @@ -2225,7 +2227,7 @@ # define CACHE_LINE_SIZE 32 /* Wild guess */ # endif -# if defined(LINUX) || defined(__GLIBC__) +# if defined(LINUX) || defined(HURD) || defined(__GLIBC__) # define REGISTER_LIBRARIES_EARLY /* We sometimes use dl_iterate_phdr, which may acquire an internal */ /* lock. This isn't safe after the world has stopped. So we must */ @@ -2260,6 +2262,9 @@ # if defined(GC_AIX_THREADS) && !defined(_AIX) --> inconsistent configuration # endif +# if defined(GC_GNU_THREADS) && !defined(HURD) + --> inconsistent configuration +# endif # if defined(GC_WIN32_THREADS) && !defined(MSWIN32) && !defined(CYGWIN32) --> inconsistent configuration # endif diff --git a/boehm-gc/os_dep.c b/boehm-gc/os_dep.c index ca8be1a8236..a2dd3046dad 100644 --- a/boehm-gc/os_dep.c +++ b/boehm-gc/os_dep.c @@ -312,7 +312,7 @@ char *GC_parse_map_entry(char *buf_ptr, word *start, word *end, /* for recent Linux versions. This seems to be the easiest way to */ /* cover all versions. */ -# ifdef LINUX +# if defined(LINUX) || defined(HURD) /* Some Linux distributions arrange to define __data_start. Some */ /* define data_start as a weak symbol. The latter is technically */ /* broken, since the user program may define data_start, in which */ @@ -331,7 +331,7 @@ char *GC_parse_map_entry(char *buf_ptr, word *start, word *end, { extern ptr_t GC_find_limit(); -# ifdef LINUX +# if defined(LINUX) || defined(HURD) /* Try the easy approaches first: */ if ((ptr_t)__data_start != 0) { GC_data_start = (ptr_t)(__data_start); diff --git a/boehm-gc/pthread_support.c b/boehm-gc/pthread_support.c index b3abc69e68b..6d8f020e076 100644 --- a/boehm-gc/pthread_support.c +++ b/boehm-gc/pthread_support.c @@ -884,7 +884,7 @@ void GC_thr_init() GC_nprocs = pthread_num_processors_np(); # endif # if defined(GC_OSF1_THREADS) || defined(GC_AIX_THREADS) \ - || defined(GC_SOLARIS_PTHREADS) + || defined(GC_SOLARIS_PTHREADS) || defined(GC_GNU_THREADS) GC_nprocs = sysconf(_SC_NPROCESSORS_ONLN); if (GC_nprocs <= 0) GC_nprocs = 1; # endif diff --git a/boehm-gc/specific.c b/boehm-gc/specific.c index 7d5d8894d81..e78cf7ac912 100644 --- a/boehm-gc/specific.c +++ b/boehm-gc/specific.c @@ -13,7 +13,7 @@ #include "private/gc_priv.h" /* For GC_compare_and_exchange, GC_memory_barrier */ -#if defined(GC_LINUX_THREADS) +#if defined(GC_LINUX_THREADS) || defined(GC_GNU_THREADS) #include "private/specific.h" diff --git a/boehm-gc/threadlibs.c b/boehm-gc/threadlibs.c index 9078c8d8cd9..69fcc5e90ab 100644 --- a/boehm-gc/threadlibs.c +++ b/boehm-gc/threadlibs.c @@ -12,7 +12,8 @@ int main() # endif # if defined(GC_LINUX_THREADS) || defined(GC_IRIX_THREADS) \ || defined(GC_SOLARIS_PTHREADS) \ - || defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS) + || defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS) \ + || defined(GC_GNU_THREADS) printf("-lpthread\n"); # endif # if defined(GC_FREEBSD_THREADS) -- 2.30.2