Update.
authorUlrich Drepper <drepper@redhat.com>
Sat, 15 Mar 2003 09:51:22 +0000 (09:51 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 15 Mar 2003 09:51:22 +0000 (09:51 +0000)
2003-03-15  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/x86_64/pthreaddef.h (CURRENT_STACK_FRAME): Don't use
__builtin_frame_address, use stack pointer.

* sysdeps/unix/sysv/linux/jmp-unwind.c: Use CURRENT_STACK_FRAME
instead of __builtin_frame_pointer.

nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/jmp-unwind.c
nptl/sysdeps/x86_64/pthreaddef.h
nptl/sysdeps/x86_64/tls.h

index d7e2c4c..34d6686 100644 (file)
@@ -1,3 +1,11 @@
+2003-03-15  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/x86_64/pthreaddef.h (CURRENT_STACK_FRAME): Don't use
+       __builtin_frame_address, use stack pointer.
+
+       * sysdeps/unix/sysv/linux/jmp-unwind.c: Use CURRENT_STACK_FRAME
+       instead of __builtin_frame_pointer.
+
 2003-03-14  Ulrich Drepper  <drepper@redhat.com>
 
        * tst-basic1.c (do_test): Add cast to avoid warning.
index d6fbcc3..67350c2 100644 (file)
@@ -20,6 +20,7 @@
 #include <setjmp.h>
 #include <stddef.h>
 #include <pthread-functions.h>
+#include <pthreaddef.h>
 
 extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe);
 #pragma weak __pthread_cleanup_upto
@@ -35,5 +36,5 @@ _longjmp_unwind (jmp_buf env, int val)
 #endif
 
   if (fptr != NULL)
-    fptr (env->__jmpbuf, __builtin_frame_address (0));
+    fptr (env->__jmpbuf, CURRENT_STACK_FRAME);
 }
index 697329c..8fe6100 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -34,8 +34,9 @@
 #define SIGCANCEL              __SIGRTMIN
 
 
-/* Location of current stack frame.  */
-#define CURRENT_STACK_FRAME    __builtin_frame_address (0)
+/* Location of current stack frame.  The frame pointer is not usable.  */
+#define CURRENT_STACK_FRAME \
+  ({ char *frame; asm ("movq %%rsp, %0" : "=r" (frame)); frame; })
 
 
 /* XXX Until we have a better place keep the definitions here.  */
index e7fab7a..f382db2 100644 (file)
@@ -253,6 +253,18 @@ typedef struct
        }})
 
 
+#define CALL_THREAD_FCT(descr) \
+  ({ void *__res;                                                            \
+     asm volatile ("movq %%fs:%P2, %%rdi\n\t"                                \
+                  "callq *%%fs:%P1"                                          \
+                  : "=a" (__res)                                             \
+                  : "i" (offsetof (struct pthread, start_routine)),          \
+                    "i" (offsetof (struct pthread, arg))                     \
+                  : "di", "si", "cx", "dx", "r8", "r9", "r10", "r11",        \
+                    "memory", "cc");                                         \
+     __res; })
+
+
 #endif /* __ASSEMBLER__ */
 
 #endif /* tls.h */