aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/x86_64')
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sigaction.c5
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sysdep.h4
2 files changed, 6 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/sigaction.c b/sysdeps/unix/sysv/linux/x86_64/sigaction.c
index 1d8ef6f34f..48cb447859 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sigaction.c
+++ b/sysdeps/unix/sysv/linux/x86_64/sigaction.c
@@ -97,14 +97,15 @@ weak_alias (__libc_sigaction, sigaction)
appropriate GDB maintainer. */
#define RESTORE(name, syscall) RESTORE2 (name, syscall)
-#define RESTORE2(name, syscall) \
+# define RESTORE2(name, syscall) \
asm \
( \
".align 16\n" \
+ CFI_STARTPROC "\n" \
"__" #name ":\n" \
" movq $" #syscall ", %rax\n" \
" syscall\n" \
+ CFI_ENDPROC "\n" \
);
-
/* The return code for realtime-signals. */
RESTORE (restore_rt, __NR_rt_sigreturn)
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
index e88c48a9e4..430ec86a5d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
@@ -132,11 +132,13 @@
0: \
xorq %rdx, %rdx; \
subq %rax, %rdx; \
- pushq %rdx \
+ pushq %rdx; \
+ cfi_adjust_cfa_offset(8); \
PUSH_ERRNO_LOCATION_RETURN; \
call BP_SYM (__errno_location)@PLT; \
POP_ERRNO_LOCATION_RETURN; \
popq %rdx; \
+ cfi_adjust_cfa_offset(-8); \
movl %edx, (%rax); \
orq $-1, %rax; \
jmp L(pseudo_end);