summaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/i386/pt-setup.c
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2012-08-31 00:04:26 +0200
committerThomas Schwinge <thomas@codesourcery.com>2012-08-31 00:04:26 +0200
commitc8538dfe4032c398974e46edef97cac03a9f185f (patch)
tree68890f5a31937f1f3616dae163d005f91ef0e067 /sysdeps/mach/hurd/i386/pt-setup.c
parente2c739a43175f15d423010ef83ca3be67a26da8e (diff)
Revert "Store self in __thread variable instead of threadvar"t/tls-threadvar-pthread_self
This reverts commit 25260994c812050a5d7addf125cdc90c911ca5c1. Conflicts: sysdeps/l4/hurd/ia32/pt-setup.c sysdeps/l4/hurd/powerpc/pt-setup.c
Diffstat (limited to 'sysdeps/mach/hurd/i386/pt-setup.c')
-rw-r--r--sysdeps/mach/hurd/i386/pt-setup.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sysdeps/mach/hurd/i386/pt-setup.c b/sysdeps/mach/hurd/i386/pt-setup.c
index 73fd43d..5420dc8 100644
--- a/sysdeps/mach/hurd/i386/pt-setup.c
+++ b/sysdeps/mach/hurd/i386/pt-setup.c
@@ -57,14 +57,16 @@ stack_setup (struct __pthread *thread,
/* Next, make room for the TSDs. */
top -= __hurd_threadvar_max;
+ /* Save the self pointer. */
+ top[_HURD_THREADVAR_THREAD] = (uintptr_t) thread;
+
if (start_routine)
{
/* And then the call frame. */
- top -= 3;
+ top -= 2;
top = (uintptr_t *) ((uintptr_t) top & ~0xf);
- top[2] = (uintptr_t) arg; /* Argument to START_ROUTINE. */
- top[1] = (uintptr_t) start_routine;
- top[0] = (uintptr_t) thread;
+ top[1] = (uintptr_t) arg; /* Argument to START_ROUTINE. */
+ top[0] = (uintptr_t) start_routine;
*--top = 0; /* Fake return address. */
}
@@ -80,7 +82,7 @@ stack_setup (struct __pthread *thread,
int
__pthread_setup (struct __pthread *thread,
- void (*entry_point)(struct __pthread *, void *(*)(void *), void *),
+ void (*entry_point)(void *(*)(void *), void *),
void *(*start_routine)(void *), void *arg)
{
error_t err;