From 1cf0d8510a4102506ce84dab72ca3381757bb106 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Fri, 30 Nov 2001 06:19:58 +0000 Subject: [PATCH] * debug.cc (makethread): Eliminate unneeded function call. * miscfuncs.cc (tls_ix): Predefine. * perthread.h (set_reent): Eliminate. (get_reent): Ditto. * winbase.h (my_tlsalloc): Use global stack base pointer. Set newly allocated location to NULL. (my_tlssetvalue): Use global stack base pointer. (my_tlsgetvalue): Ditto. --- winsup/cygwin/ChangeLog | 11 +++++++++++ winsup/cygwin/debug.cc | 1 - winsup/cygwin/miscfuncs.cc | 2 +- winsup/cygwin/perthread.h | 21 --------------------- winsup/cygwin/winbase.h | 13 ++++++------- 5 files changed, 18 insertions(+), 30 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 846fc5be8..ea2483b8b 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,14 @@ +2001-11-30 Christopher Faylor + + * debug.cc (makethread): Eliminate unneeded function call. + * miscfuncs.cc (tls_ix): Predefine. + * perthread.h (set_reent): Eliminate. + (get_reent): Ditto. + * winbase.h (my_tlsalloc): Use global stack base pointer. Set newly + allocated location to NULL. + (my_tlssetvalue): Use global stack base pointer. + (my_tlsgetvalue): Ditto. + 2001-11-27 Christopher Faylor * winsup.h: Reorganize to avoid use of experimental stuff. diff --git a/winsup/cygwin/debug.cc b/winsup/cygwin/debug.cc index 400130614..76cce92ff 100644 --- a/winsup/cygwin/debug.cc +++ b/winsup/cygwin/debug.cc @@ -95,7 +95,6 @@ thread_stub (VOID *arg) SIGSEGV or SIGFPE. */ init_exceptions (&except_entry); - set_reent (user_data->impure_ptr); ExitThread (threadfunc (threadarg)); } diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc index b93a7588b..5d3010470 100644 --- a/winsup/cygwin/miscfuncs.cc +++ b/winsup/cygwin/miscfuncs.cc @@ -12,7 +12,7 @@ details. */ #include "cygerrno.h" #include -long tls_ix; +long tls_ix = -1; const char case_folded_lower[] NO_COPY = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, diff --git a/winsup/cygwin/perthread.h b/winsup/cygwin/perthread.h index 185cc04d6..48ad97621 100644 --- a/winsup/cygwin/perthread.h +++ b/winsup/cygwin/perthread.h @@ -15,27 +15,6 @@ details. */ struct _reent; extern struct _reent reent_data; -extern DWORD *__stackbase __asm__ ("%fs:4"); - -extern __inline struct _reent * -get_reent () -{ - DWORD *base = __stackbase - 1; - - if (*base != PTMAGIC) - return &reent_data; - return (struct _reent *) base[-1]; -} - -extern inline void -set_reent (struct _reent *r) -{ - DWORD *base = __stackbase - 1; - - *base = PTMAGIC; - base[-1] = (DWORD) r; -} - #define PER_THREAD_FORK_CLEAR ((void *)0xffffffff) class per_thread { diff --git a/winsup/cygwin/winbase.h b/winsup/cygwin/winbase.h index 801badc44..d72bb0893 100644 --- a/winsup/cygwin/winbase.h +++ b/winsup/cygwin/winbase.h @@ -42,28 +42,27 @@ extern __inline__ long ilockexch (long *t, long v) #define InterlockedExchange ilockexch extern long tls_ix; +extern char * volatile *__stackbase __asm__ ("%fs:4"); extern __inline__ DWORD my_tlsalloc () { - return (DWORD) ilockincr (&tls_ix); + DWORD n = ilockdecr (&tls_ix); + __stackbase[tls_ix] = NULL; + return n; } extern __inline__ BOOL my_tlssetvalue (DWORD ix, void *val) { - char **stackbase; - __asm__ volatile ("movl %%fs:4,%0": "=g" (stackbase)); - stackbase[-ix] = (char *) val; + __stackbase[ix] = (char *) val; return 1; } extern __inline__ void * my_tlsgetvalue (DWORD ix) { - char **stackbase; - __asm__ volatile ("movl %%fs:4,%0": "=g" (stackbase)); - return stackbase[-ix]; + return __stackbase[ix]; } extern __inline__ BOOL