diff options
Diffstat (limited to 'libmudflap')
-rw-r--r-- | libmudflap/ChangeLog | 10 | ||||
-rw-r--r-- | libmudflap/config.h.in | 3 | ||||
-rwxr-xr-x | libmudflap/configure | 31 | ||||
-rw-r--r-- | libmudflap/configure.ac | 1 | ||||
-rw-r--r-- | libmudflap/mf-hooks3.c | 4 | ||||
-rw-r--r-- | libmudflap/mf-impl.h | 2 | ||||
-rw-r--r-- | libmudflap/mf-runtime.c | 2 |
7 files changed, 49 insertions, 4 deletions
diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog index 25dcdf9730e..e42a15b5605 100644 --- a/libmudflap/ChangeLog +++ b/libmudflap/ChangeLog @@ -1,3 +1,13 @@ +2009-01-23 Jie Zhang <jie.zhang@analog.com> + + * mf-impl.h (__mf_get_state, __mf_set_state): Don't use + __thread when TLS support is emulated. + * mf-hooks3.c (__mf_get_state, __mf_set_state): Likewise. + * mf-runtime.c (__mf_state_1): Likewise. + * configure.ac: Use GCC_CHECK_EMUTLS. + * configure: Regenerate. + * config.h.in: Regenerate. + 2008-12-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * configure: Regenerate. diff --git a/libmudflap/config.h.in b/libmudflap/config.h.in index 94b2b8a2098..0c88f61553f 100644 --- a/libmudflap/config.h.in +++ b/libmudflap/config.h.in @@ -277,5 +277,8 @@ /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS +/* Define to 1 if the target use emutls for thread-local storage. */ +#undef USE_EMUTLS + /* Version number of package */ #undef VERSION diff --git a/libmudflap/configure b/libmudflap/configure index ad10a2c238d..758ac8f0a30 100755 --- a/libmudflap/configure +++ b/libmudflap/configure @@ -13028,6 +13028,37 @@ _ACEOF fi + echo "$as_me:$LINENO: checking whether the thread-local storage support is from emutls" >&5 +echo $ECHO_N "checking whether the thread-local storage support is from emutls... $ECHO_C" >&6 +if test "${gcc_cv_use_emutls+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + gcc_cv_use_emutls=no + echo '__thread int a; int b; int main() { return a = b; }' > conftest.c + if { ac_try='${CC-cc} -Werror -S -o conftest.s conftest.c 1>&5' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + if grep __emutls_get_address conftest.s > /dev/null; then + gcc_cv_use_emutls=yes + fi + fi + rm -f conftest.* + +fi +echo "$as_me:$LINENO: result: $gcc_cv_use_emutls" >&5 +echo "${ECHO_T}$gcc_cv_use_emutls" >&6 + if test "$gcc_cv_use_emutls" = "yes" ; then + +cat >>confdefs.h <<\_ACEOF +#define USE_EMUTLS 1 +_ACEOF + + fi + ac_config_files="$ac_config_files Makefile testsuite/Makefile testsuite/mfconfig.exp" cat >confcache <<\_ACEOF diff --git a/libmudflap/configure.ac b/libmudflap/configure.ac index a22be278d32..8ce99a10270 100644 --- a/libmudflap/configure.ac +++ b/libmudflap/configure.ac @@ -265,6 +265,7 @@ fi # See if we support thread-local storage. GCC_CHECK_TLS +GCC_CHECK_EMUTLS AC_CONFIG_FILES([Makefile testsuite/Makefile testsuite/mfconfig.exp]) AC_OUTPUT diff --git a/libmudflap/mf-hooks3.c b/libmudflap/mf-hooks3.c index dec4cd63b83..5792a14f5db 100644 --- a/libmudflap/mf-hooks3.c +++ b/libmudflap/mf-hooks3.c @@ -78,7 +78,7 @@ DECLARE(int, pthread_create, pthread_t *thr, const pthread_attr_t *attr, /* Multithreading support hooks. */ -#ifndef HAVE_TLS +#if !defined(HAVE_TLS) || defined(USE_EMUTLS) /* We don't have TLS. Ordinarily we could use pthread keys, but since we're commandeering malloc/free that presents a few problems. The first is that we'll recurse from __mf_get_state to pthread_setspecific to malloc back to @@ -217,7 +217,7 @@ __mf_pthread_cleanup (void *arg) if (__mf_opts.heur_std_data) __mf_unregister (&errno, sizeof (errno), __MF_TYPE_GUESS); -#ifndef HAVE_TLS +#if !defined(HAVE_TLS) || defined(USE_EMUTLS) struct mf_thread_data *data = __mf_find_threadinfo (0); if (data) data->used_p = 0; diff --git a/libmudflap/mf-impl.h b/libmudflap/mf-impl.h index 728a58bc05d..15d0b9ae53a 100644 --- a/libmudflap/mf-impl.h +++ b/libmudflap/mf-impl.h @@ -244,7 +244,7 @@ extern pthread_mutex_t __mf_biglock; #define UNLOCKTH() do {} while (0) #endif -#if defined(LIBMUDFLAPTH) && !defined(HAVE_TLS) +#if defined(LIBMUDFLAPTH) && (!defined(HAVE_TLS) || defined(USE_EMUTLS)) extern enum __mf_state_enum __mf_get_state (void); extern void __mf_set_state (enum __mf_state_enum); #else diff --git a/libmudflap/mf-runtime.c b/libmudflap/mf-runtime.c index 79fdb323dbe..93b895a1573 100644 --- a/libmudflap/mf-runtime.c +++ b/libmudflap/mf-runtime.c @@ -178,7 +178,7 @@ struct __mf_options __mf_opts; int __mf_starting_p = 1; #ifdef LIBMUDFLAPTH -#ifdef HAVE_TLS +#if defined(HAVE_TLS) && !defined(USE_EMUTLS) __thread enum __mf_state_enum __mf_state_1 = reentrant; #endif #else |