diff options
| author | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-20 14:13:30 +0000 |
|---|---|---|
| committer | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-20 14:13:30 +0000 |
| commit | 08b2466e87abf89c357694ca623d9cf283468d0d (patch) | |
| tree | 117bfa4cc79cc13167d4ec4a7b129035d6397070 | |
| parent | 2b9f2e4688aa7f44042aee897b98f56beb74d3dc (diff) | |
| download | ppe42-gcc-08b2466e87abf89c357694ca623d9cf283468d0d.tar.gz ppe42-gcc-08b2466e87abf89c357694ca623d9cf283468d0d.zip | |
* config/vxlib.c (tls_delete_hook): Use TCB for kernel tasks.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123086 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/config/vxlib-tls.c | 16 |
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 18a85ec79c8..b395834b6bd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2007-03-20 Nathan Sidwell <nathan@codesourcery.com> + + * config/vxlib.c (tls_delete_hook): Use TCB for kernel tasks. + 2007-03-19 Andrew Haley <aph@redhat.com> PR tree-optimization/31264 diff --git a/gcc/config/vxlib-tls.c b/gcc/config/vxlib-tls.c index eba8f5cf547..e98355591f8 100644 --- a/gcc/config/vxlib-tls.c +++ b/gcc/config/vxlib-tls.c @@ -155,9 +155,18 @@ static __gthread_once_t tls_init_guard = __GTHREAD_ONCE_INIT; static void tls_delete_hook (void *tcb ATTRIBUTE_UNUSED) { - struct tls_data *data = __gthread_get_tls_data (); + struct tls_data *data; __gthread_key_t key; +#ifdef __RTP__ + data = __gthread_get_tls_data (); +#else + /* In kernel mode, we can be called in the context of the thread + doing the killing, so must use the TCB to determine the data of + the thread being killed. */ + data = __gthread_get_tsd_data (tcb); +#endif + if (data && data->owner == &self_owner) { __gthread_enter_tls_dtor_context (); @@ -182,8 +191,11 @@ tls_delete_hook (void *tcb ATTRIBUTE_UNUSED) taskDeleteHookDelete ((FUNCPTR)tls_delete_hook); __gthread_mutex_unlock (&tls_lock); } - +#ifdef __RTP__ __gthread_set_tls_data (0); +#else + __gthread_set_tsd_data (tcb, 0); +#endif __gthread_leave_tls_dtor_context (); } } |

