aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2001-11-30 06:19:58 +0000
committerChristopher Faylor <me@cgf.cx>2001-11-30 06:19:58 +0000
commit1cf0d8510a4102506ce84dab72ca3381757bb106 (patch)
tree9624b673564ffdd0183eb37ee184d56085790083
parent8569e5542e4fa276337260b920bc17aea49d9cc4 (diff)
* 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.
-rw-r--r--winsup/cygwin/ChangeLog11
-rw-r--r--winsup/cygwin/debug.cc1
-rw-r--r--winsup/cygwin/miscfuncs.cc2
-rw-r--r--winsup/cygwin/perthread.h21
-rw-r--r--winsup/cygwin/winbase.h13
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 <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.
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 <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,
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