diff options
author | Richard Henderson <rth@twiddle.net> | 2012-06-05 08:12:03 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2012-06-05 08:12:03 -0700 |
commit | 7d1feb5693be7e606104cc2b6657c746a93e5926 (patch) | |
tree | 5bd2bb3cc9028b1dac49703202e9c1be59bfb1ca | |
parent | 0ff73bfcb06a02f318850333f315dee587151d00 (diff) | |
download | glibc-7d1feb5693be7e606104cc2b6657c746a93e5926.tar.gz glibc-7d1feb5693be7e606104cc2b6657c746a93e5926.tar.xz glibc-7d1feb5693be7e606104cc2b6657c746a93e5926.zip |
alpha: Use .cfi_signal_frame in rt_sigaction
-rw-r--r-- | ChangeLog.alpha | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/rt_sigaction.S | 31 |
2 files changed, 14 insertions, 20 deletions
diff --git a/ChangeLog.alpha b/ChangeLog.alpha index 77e6de1365..705a0204d7 100644 --- a/ChangeLog.alpha +++ b/ChangeLog.alpha @@ -1,5 +1,8 @@ 2012-06-05 Richard Henderson <rth@twiddle.net> + * sysdeps/unix/sysv/linux/alpha/rt_sigaction.S: Use .cfi_signal_frame + instead of a hack using extra nops. + * sysdeps/unxi/alpha/getppid.S: New file. * sysdeps/unxi/alpha/getegid.S: New file. * sysdeps/unxi/alpha/geteuid.S: New file. diff --git a/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S b/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S index 96069c72ba..42062b0847 100644 --- a/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S +++ b/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1998-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson <rth@cygnus.com>, 1998 @@ -28,7 +28,7 @@ .text ENTRY(__syscall_rt_sigaction) - .frame sp,0,ra,0 + cfi_startproc ldgp gp,0(pv) #ifdef PROF .set noat @@ -39,18 +39,12 @@ ENTRY(__syscall_rt_sigaction) .prologue 1 beq a1, 0f - ldl t0, 8(a1) # sa_flags - - /* The unwinder will subtract one from the return address when - attempting to find the call instruction that led us here. - Since we didn't get here via a normal call, if we do nothing - we would pick up the wrong symbol and the wrong FDE. Account - for this by adding a nop to the start of the function and - then skipping it here by adding 4. */ - ldah a4, __syscall_sigreturn+4(gp) !gprelhigh - ldah t1, __syscall_rt_sigreturn+4(gp) !gprelhigh - lda a4, __syscall_sigreturn+4(a4) !gprellow - lda t1, __syscall_rt_sigreturn+4(t1) !gprellow + ldl t0, 8(a1) # sa_flags + + ldah a4, __syscall_sigreturn(gp) !gprelhigh + ldah t1, __syscall_rt_sigreturn(gp) !gprelhigh + lda a4, __syscall_sigreturn(a4) !gprellow + lda t1, __syscall_rt_sigreturn(t1) !gprellow and t0, 0x40, t0 # SA_SIGINFO cmovne t0, t1, a4 @@ -58,7 +52,7 @@ ENTRY(__syscall_rt_sigaction) callsys bne a3, SYSCALL_ERROR_LABEL ret - + cfi_endproc PSEUDO_END(__syscall_rt_sigaction) /* To enable unwinding through the signal frame without special hackery @@ -90,26 +84,23 @@ PSEUDO_END(__syscall_rt_sigaction) .endm .align 4 - nop - nop - nop cfi_startproc cfi_return_column (64) + .cfi_signal_frame SIGCONTEXT_REGS -648 cfi_def_cfa_offset (648) __syscall_sigreturn: - nop mov sp, a0 ldi v0, __NR_sigreturn callsys .size __syscall_sigreturn, .-__syscall_sigreturn .type __syscall_sigreturn, @function + .align 4 cfi_def_cfa_offset (176 + 648) __syscall_rt_sigreturn: - nop mov sp,a0 ldi v0,__NR_rt_sigreturn callsys |