From 08c4b3d27c80c24a3fb4abc2ab77826348ade807 Mon Sep 17 00:00:00 2001 From: tschwinge Date: Sun, 4 Nov 2012 22:56:02 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193142 138bc75d-0d04-0410-961f-82ee72b054a4 --- ChangeLog | 18 ++++++++++++++++++ configure | 9 +++++++++ configure.ac | 5 +++++ dyn_load.c | 3 ++- include/gc_config.h.in | 3 +++ include/gc_config_macros.h | 4 +++- include/private/gcconfig.h | 13 +++++++++---- os_dep.c | 4 ++-- pthread_support.c | 2 +- specific.c | 2 +- threadlibs.c | 3 ++- 11 files changed, 55 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 57359f0b..7759258a 100644 --- a/ChangeLog +++ b/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/configure b/configure index 1d751fd6..6020e988 100755 --- a/configure +++ b/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/configure.ac b/configure.ac index 2eddc9fe..1ccfe37e 100644 --- a/configure.ac +++ b/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/dyn_load.c b/dyn_load.c index f1e3e8ec..eac2e716 100644 --- a/dyn_load.c +++ b/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/include/gc_config.h.in b/include/gc_config.h.in index 6bdd807b..d1ae47d8 100644 --- a/include/gc_config.h.in +++ b/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/include/gc_config_macros.h b/include/gc_config_macros.h index 12e91e27..fd3006c1 100644 --- a/include/gc_config_macros.h +++ b/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/include/private/gcconfig.h b/include/private/gcconfig.h index 0263c13f..594ce431 100644 --- a/include/private/gcconfig.h +++ b/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/os_dep.c b/os_dep.c index ca8be1a8..a2dd3046 100644 --- a/os_dep.c +++ b/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/pthread_support.c b/pthread_support.c index b3abc69e..6d8f020e 100644 --- a/pthread_support.c +++ b/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/specific.c b/specific.c index 7d5d8894..e78cf7ac 100644 --- a/specific.c +++ b/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/threadlibs.c b/threadlibs.c index 9078c8d8..69fcc5e9 100644 --- a/threadlibs.c +++ b/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.49.0