diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-25 09:45:16 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-03-25 09:45:16 +0000 |
commit | 7192af4b793a2fd3c60f7e3e895623614a9cc6b7 (patch) | |
tree | a5c42f4b1268f44bb078af04644014a7390b49fd /boehm-gc | |
parent | 64c06c2c5160167c30354aa540236ca1ebba98be (diff) |
Merge from csl/sourcerygxx-4_1 branch, revision 112375
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/csl/coldfire-4_1@112376 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'boehm-gc')
-rw-r--r-- | boehm-gc/ChangeLog | 22 | ||||
-rwxr-xr-x | boehm-gc/configure | 23 | ||||
-rw-r--r-- | boehm-gc/configure.ac | 19 | ||||
-rw-r--r-- | boehm-gc/include/gc_config.h.in | 3 | ||||
-rw-r--r-- | boehm-gc/include/gc_ext_config.h.in | 2 | ||||
-rw-r--r-- | boehm-gc/include/gc_pthread_redirects.h | 2 | ||||
-rw-r--r-- | boehm-gc/pthread_support.c | 40 |
7 files changed, 109 insertions, 2 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 06f026a1121..ac5e80ff154 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,25 @@ +2006-02-28 Release Manager + + * GCC 4.1.0 released. + +2006-02-09 Tom Tromey <tromey@redhat.com> + + * pthread_support.c: Conditionally include dlfcn.h. + +2006-02-06 Jakub Jelinek <jakub@redhat.com> + Anthony Green <green@redhat.com> + Tom Tromey <tromey@redhat.com> + + * include/gc_ext_config.h.in: Added GC_PTHREAD_SYM_VERSION. + * include/gc_config.h.in: Rebuilt. + * include/gc_pthread_redirects.h (pthread_create): Conditionally + define. + * pthread_support.c (pthread_create_): New global. + (constr): New function. + (pthread_create): Conditionally renamed. + * configure: Rebuilt. + * configure.ac (GC_PTHREAD_SYM_VERSION): Define. + 2005-11-01 Bryce McKinlay <mckinlay@redhat.com> * include/private/gc_priv.h: Increase MAX_ROOT_SETS to 1024. diff --git a/boehm-gc/configure b/boehm-gc/configure index 7aa7c4ff03a..d1ba87617e1 100755 --- a/boehm-gc/configure +++ b/boehm-gc/configure @@ -6627,6 +6627,29 @@ _ACEOF fi +symver= +case "$target" in + *-*-linux* ) + cat > conftest.c <<EOF +#include <pthread.h> +void *tf (void *arg) { (void) arg; return NULL; } +int main (void) { pthread_t th; pthread_create (&th, NULL, tf, NULL); return 0; } +EOF + if $CC $CFLAGS -pthread -o conftest conftest.c > /dev/null 2>&1; then + symver=`readelf -s conftest 2> /dev/null | sed -n '/UND pthread_create@/{s/^.*@//;s/ .*$//;p;q}'` + fi + rm -f conftest conftest.c + ;; +esac +if test -n "$symver"; then + +cat >>confdefs.h <<_ACEOF +#define GC_PTHREAD_SYM_VERSION "$symver" +_ACEOF + +fi + + if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then toolexecdir='$(exec_prefix)/$(target_noncanonical)' diff --git a/boehm-gc/configure.ac b/boehm-gc/configure.ac index dfb0e17e261..ef1e831a4b5 100644 --- a/boehm-gc/configure.ac +++ b/boehm-gc/configure.ac @@ -450,6 +450,25 @@ if test "${gc_use_mmap}" = "yes"; then AC_DEFINE(USE_MMAP, 1, [use MMAP instead of sbrk to get new memory]) fi +symver= +case "$target" in + *-*-linux* ) + cat > conftest.c <<EOF +#include <pthread.h> +void *tf (void *arg) { (void) arg; return NULL; } +int main (void) { pthread_t th; pthread_create (&th, NULL, tf, NULL); return 0; } +EOF + if $CC $CFLAGS -pthread -o conftest conftest.c > /dev/null 2>&1; then + symver=`readelf -s conftest 2> /dev/null | sed -n '/UND pthread_create@/{s/^.*@//;s/ .*$//;p;q}'` + fi + rm -f conftest conftest.c + ;; +esac +if test -n "$symver"; then + AC_DEFINE_UNQUOTED(GC_PTHREAD_SYM_VERSION, "$symver", [symbol version of pthread_create]) +fi + + if test -n "$with_cross_host" && test x"$with_cross_host" != x"no"; then toolexecdir='$(exec_prefix)/$(target_noncanonical)' diff --git a/boehm-gc/include/gc_config.h.in b/boehm-gc/include/gc_config.h.in index 92f1b2cf460..cfaae9dd464 100644 --- a/boehm-gc/include/gc_config.h.in +++ b/boehm-gc/include/gc_config.h.in @@ -45,6 +45,9 @@ /* support for Tru64 pthreads */ #undef GC_OSF1_THREADS +/* symbol version of pthread_create */ +#undef GC_PTHREAD_SYM_VERSION + /* support for Solaris pthreads */ #undef GC_SOLARIS_PTHREADS diff --git a/boehm-gc/include/gc_ext_config.h.in b/boehm-gc/include/gc_ext_config.h.in index 52a662dcf0b..716143dc62f 100644 --- a/boehm-gc/include/gc_ext_config.h.in +++ b/boehm-gc/include/gc_ext_config.h.in @@ -3,3 +3,5 @@ external clients that do not want to include the full gc.h. Currently this is used by libjava/include/boehm-gc.h. */ #undef THREAD_LOCAL_ALLOC + +#undef GC_PTHREAD_SYM_VERSION diff --git a/boehm-gc/include/gc_pthread_redirects.h b/boehm-gc/include/gc_pthread_redirects.h index 842518cfcc4..f9d4939affc 100644 --- a/boehm-gc/include/gc_pthread_redirects.h +++ b/boehm-gc/include/gc_pthread_redirects.h @@ -68,7 +68,9 @@ # undef pthread_detach #endif +#ifndef GC_PTHREAD_SYM_VERSION # define pthread_create GC_pthread_create +#endif # define pthread_join GC_pthread_join # define pthread_detach GC_pthread_detach diff --git a/boehm-gc/pthread_support.c b/boehm-gc/pthread_support.c index 2a3b91917c7..4b32afef4bd 100644 --- a/boehm-gc/pthread_support.c +++ b/boehm-gc/pthread_support.c @@ -47,6 +47,13 @@ /*#define DEBUG_THREADS 1*/ /*#define GC_ASSERTIONS*/ +#include "gc_config.h" + +#ifdef GC_PTHREAD_SYM_VERSION +#define _GNU_SOURCE +#include <dlfcn.h> +#endif + # include "gc.h" # include "private/pthread_support.h" @@ -1194,8 +1201,37 @@ void * GC_start_routine(void * arg) return(result); } +#ifdef GC_PTHREAD_SYM_VERSION + +/* Force constr to execute prior to main(). */ +static void constr (void) __attribute__ ((constructor)); + +static int +(*pthread_create_)(pthread_t *new_thread, + const pthread_attr_t *attr_in, + void * (*thread_execp)(void *), void *arg); + +static void +constr (void) +{ + /* Get a pointer to the real pthread_create. */ + pthread_create_ = dlvsym (RTLD_NEXT, "pthread_create", + GC_PTHREAD_SYM_VERSION); +} + +#define GC_PTHREAD_CREATE_NAME pthread_create +#define GC_PTHREAD_REAL_NAME (*pthread_create_) + +#else + +#define GC_PTHREAD_CREATE_NAME WRAP_FUNC(pthread_create) +#define GC_PTHREAD_REAL_NAME REAL_FUNC(pthread_create) + +#endif + + int -WRAP_FUNC(pthread_create)(pthread_t *new_thread, +GC_PTHREAD_CREATE_NAME(pthread_t *new_thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) { @@ -1250,7 +1286,7 @@ WRAP_FUNC(pthread_create)(pthread_t *new_thread, pthread_self()); # endif - result = REAL_FUNC(pthread_create)(new_thread, attr, GC_start_routine, si); + result = GC_PTHREAD_REAL_NAME(new_thread, attr, GC_start_routine, si); # ifdef DEBUG_THREADS GC_printf1("Started thread 0x%X\n", *new_thread); |