about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/i386/sigaction.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386/sigaction.c')
-rw-r--r--sysdeps/unix/sysv/linux/i386/sigaction.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c
index 2571f1d922..5e431218e9 100644
--- a/sysdeps/unix/sysv/linux/i386/sigaction.c
+++ b/sysdeps/unix/sysv/linux/i386/sigaction.c
@@ -148,12 +148,20 @@ __sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
 
 weak_alias (__sigaction, sigaction)
 
+/* NOTE: Please think twice before making any changes to the bits of
+   code below.  GDB needs some intimate knowledge about it to
+   recognize them as signal trampolines, and make backtraces through
+   signal handlers work right.  Important are both the names
+   (__restore and __restore_rt) and the exact instruction sequence.
+   If you ever feel the need to make any changes, please notify the
+   appropriate GDB maintainer.  */
+
 #define RESTORE(name, syscall) RESTORE2 (name, syscall)
 #define RESTORE2(name, syscall) \
 asm						\
   (						\
    ".align 16\n"				\
-   "__" #name ":\n"					\
+   "__" #name ":\n"				\
    "	movl $" #syscall ", %eax\n"		\
    "	int  $0x80"				\
    );
@@ -168,8 +176,8 @@ RESTORE (restore_rt, __NR_rt_sigreturn)
 # define RESTORE2(name, syscall) \
 asm						\
   (						\
-   ".align 8\n"				\
-   "__" #name ":\n"					\
+   ".align 8\n"					\
+   "__" #name ":\n"				\
    "	popl %eax\n"				\
    "	movl $" #syscall ", %eax\n"		\
    "	int  $0x80"				\