* 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-30 Christopher Faylor <cgf@redhat.com>
+
+ * 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 <cgf@redhat.com>
* winsup.h: Reorganize to avoid use of experimental stuff.
SIGSEGV or SIGFPE. */
init_exceptions (&except_entry);
- set_reent (user_data->impure_ptr);
ExitThread (threadfunc (threadarg));
}
#include "cygerrno.h"
#include <sys/errno.h>
-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,
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
{
#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