If dwarf-2 cfi info was found for signal return code (which seems to happen
if it's located right after a valid function), it will not be recognized as
signal trampoline (gcc unwinder and gdb check first cfi info, and only if it
does not exists it compares the exact opcode sequence to see if we are at
signal return code block).

This fixes a real crash if thread is cancelled and the cancellation handler
fails to detect the signal return frame (common case if pthread_cancel is
used as threads are often cancelled by sending a signal to them).

Signed-off-by: Timo Teräs <[email protected]>
---
 libc/sysdeps/linux/i386/sigaction.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/libc/sysdeps/linux/i386/sigaction.c 
b/libc/sysdeps/linux/i386/sigaction.c
index de0c75d..f9af3f7 100644
--- a/libc/sysdeps/linux/i386/sigaction.c
+++ b/libc/sysdeps/linux/i386/sigaction.c
@@ -112,6 +112,9 @@ libc_hidden_weak(sigaction)
 #define RESTORE2(name, syscall) \
 __asm__        (                                               \
        ".text\n"                                       \
+       ".align 8\n"                                    \
+       "       nop\n"                                  \
+       ".align 16\n"                                   \
        "__" #name ":\n"                                \
        "       movl    $" #syscall ", %eax\n"          \
        "       int     $0x80\n"                        \
@@ -128,6 +131,7 @@ RESTORE(restore_rt, __NR_rt_sigreturn)
 # define RESTORE2(name, syscall) \
 __asm__ (                                              \
        ".text\n"                                       \
+       ".align 8\n"                                    \
        "__" #name ":\n"                                \
        "       popl    %eax\n"                         \
        "       movl    $" #syscall ", %eax\n"          \
-- 
1.7.7.1

_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to