diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-17 02:29:00 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-07-17 02:29:00 +0000 |
commit | ee3213a30ff759561602be8e94553d06b2fa2e61 (patch) | |
tree | 7eb9ea11806846cc5d60256f51b3b0a1033126fe /libmudflap/mf-runtime.c | |
parent | fbe74ea41cc74eaed95d398bdc4f9237d6fea6d0 (diff) | |
download | gcc-ee3213a30ff759561602be8e94553d06b2fa2e61.tar.gz |
* gcc.c (MFWRAP_SPEC): Don't wrap pthread_join or pthread_exit.
* acinclude.m4: New file.
* configure.ac: Invoke LIBMUDFLAP_CHECK_TLS.
* configure, config.h.in, Makefile.in, testsuite/Makefile.in: Rebuild.
* mf-hooks1.c (__mf_0fn_malloc): Move body from ...
(__mf_0fn_calloc): ... here.
* mf-hooks3.c (struct pthread_info): Remove.
(__mf_pthread_info, __mf_pthread_info_idx): Remove.
(LIBMUDFLAPTH_THREADS_MAX): Set to 1021.
(struct mf_thread_data): New.
(mf_thread_data, mf_thread_data_lock): New.
(__mf_allocate_blank_threadinfo): Remove.
(__mf_find_threadinfo): Rewrite and simplify. Only use if TLS is
not available.
(__mf_state_perthread): Remove.
(__mf_get_state, __mf_set_state): New.
(__mf_pthread_cleanup): Use &errno, rather than saved pointer.
Update mf_thread_data killing procedure.
(__mf_pthread_spawner): Similarly.
(__mf_0fn_pthread_create): Only use wrapper if necessary. Remove
code to allocate thread stack space.
(__mf_0fn_pthread_join, pthread_join): Remove.
(__mf_0fn_pthread_exit, pthread_exit): Remove.
* mf-impl.h (dyn_pthread_join, dyn_pthread_exit): Remove.
(__mf_state_1): Rename from __mf_state; use TLS when available.
(__mf_get_state, __mf_set_state): New. Update all users.
* mf-runtime.c (begin_recursion_protect1): New.
(BEGIN_RECURSION_PROTECT): Use it.
(__mf_state_1): Rename from __mf_state; use TLS when available.
(threads_active_p): Remove.
(__mf_usage): Compute it directly.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102108 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libmudflap/mf-runtime.c')
-rw-r--r-- | libmudflap/mf-runtime.c | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/libmudflap/mf-runtime.c b/libmudflap/mf-runtime.c index 317aeaef521..af584e773d9 100644 --- a/libmudflap/mf-runtime.c +++ b/libmudflap/mf-runtime.c @@ -141,20 +141,25 @@ static void mfsplay_tree_rebalance (mfsplay_tree sp); #define __MF_VIOL_WATCH 5 /* Protect against recursive calls. */ -#define BEGIN_RECURSION_PROTECT() do { \ - if (UNLIKELY (__mf_state == reentrant)) { \ - write (2, "mf: erroneous reentrancy detected in `", 38); \ - write (2, __PRETTY_FUNCTION__, strlen(__PRETTY_FUNCTION__)); \ - write (2, "'\n", 2); \ - abort (); } \ - __mf_state = reentrant; \ - } while (0) -#define END_RECURSION_PROTECT() do { \ - __mf_state = active; \ - } while (0) +static void +begin_recursion_protect1 (const char *pf) +{ + if (__mf_get_state () == reentrant) + { + write (2, "mf: erroneous reentrancy detected in `", 38); + write (2, pf, strlen(pf)); + write (2, "'\n", 2); \ + abort (); + } + __mf_set_state (reentrant); +} +#define BEGIN_RECURSION_PROTECT() \ + begin_recursion_protect1 (__PRETTY_FUNCTION__) +#define END_RECURSION_PROTECT() \ + __mf_set_state (active) /* ------------------------------------------------------------------------ */ /* Required globals. */ @@ -169,15 +174,16 @@ unsigned char __mf_lc_shift = LOOKUP_CACHE_SHIFT_DFL; #define LOOKUP_CACHE_SIZE (__mf_lc_mask + 1) struct __mf_options __mf_opts; - int __mf_starting_p = 1; -#ifndef LIBMUDFLAPTH -enum __mf_state_enum __mf_state = active; + +#ifdef LIBMUDFLAPTH +#ifdef HAVE_TLS +__thread enum __mf_state_enum __mf_state_1 = active; +#endif #else -/* See __mf_state_perthread() in mf-hooks.c. */ +enum __mf_state_enum __mf_state_1 = active; #endif - #ifdef LIBMUDFLAPTH pthread_mutex_t __mf_biglock = #ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP @@ -196,7 +202,6 @@ pthread_mutex_t __mf_biglock = #else #define pthread_join NULL #endif -const void *threads_active_p = (void *) pthread_join; #endif @@ -442,7 +447,7 @@ __mf_usage () "any of the following options. Use `-no-OPTION' to disable options.\n" "\n", #if HAVE_PTHREAD_H - (threads_active_p ? "multi-threaded " : "single-threaded "), + (pthread_join ? "multi-threaded " : "single-threaded "), #else "", #endif @@ -2211,7 +2216,7 @@ __mf_sigusr1_respond () if (__mf_sigusr1_received > __mf_sigusr1_handled) { __mf_sigusr1_handled ++; - assert (__mf_state == reentrant); + assert (__mf_get_state () == reentrant); __mfu_report (); handler_installed = 0; /* We may need to re-enable signal; this might be a SysV library. */ } |