diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h | 24 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/sigsuspend.S | 13 |
3 files changed, 23 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog index 6223f79fe6..7b1feb60cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-05-17 Richard Henderson <rth@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h (PSEUDO): + Create the __##syscall_name##_nocancel entry point. + * sysdeps/unix/sysv/linux/alpha/sigsuspend.S (__sigsuspend_nocancel): + Remove; let the sysdep-cancel.h code create it. + 2014-05-17 David S. Miller <davem@davemloft.net> * sysdeps/unix/sysv/linux/sparc/bits/termios.h (PAGEOUT, WRAP): diff --git a/sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h index 610b583b4a..69809bc9e1 100644 --- a/sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h @@ -28,24 +28,32 @@ # undef PSEUDO # define PSEUDO(name, syscall_name, args) \ - .globl name; \ + .globl __##syscall_name##_nocancel; \ + .type __##syscall_name##_nocancel, @function; \ + .usepv __##syscall_name##_nocancel, std; \ .align 4; \ - .type name, @function; \ - .usepv name, std; \ cfi_startproc; \ -__LABEL(name) \ +__LABEL(__##syscall_name##_nocancel) \ ldgp gp, 0(pv); \ PSEUDO_PROF; \ - PSEUDO_PREPARE_ARGS \ - SINGLE_THREAD_P(t0); \ - bne t0, $pseudo_cancel; \ +__LABEL($pseudo_nocancel) \ + PSEUDO_PREPARE_ARGS; \ lda v0, SYS_ify(syscall_name); \ call_pal PAL_callsys; \ bne a3, SYSCALL_ERROR_LABEL; \ __LABEL($pseudo_ret) \ .subsection 2; \ + .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \ + .globl name; \ + .type name, @function; \ + .usepv name, std; \ + .align 4; \ cfi_startproc; \ -__LABEL($pseudo_cancel) \ +__LABEL(name) \ + ldgp gp, 0(pv); \ + PSEUDO_PROF; \ + SINGLE_THREAD_P(t0); \ + beq t0, $pseudo_nocancel; \ subq sp, 64, sp; \ cfi_def_cfa_offset(64); \ stq ra, 0(sp); \ diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S index aa5e6c67d5..8a6816ec82 100644 --- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S +++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S @@ -19,19 +19,6 @@ /* sigsuspend is a special syscall since it needs to dereference the sigset. This will have to change when we have more than 64 signals. */ -#ifndef NO_CANCELLATION -#include <sysdep.h> - -#undef PSEUDO_PREPARE_ARGS -#define PSEUDO_PREPARE_ARGS ldq a0, 0(a0); - -PSEUDO(__sigsuspend_nocancel, sigsuspend, 1) - ret -/* Use END, not PSEUDO_END, so that we don't issue two $syscall_error - symbols; we'll jump into __sigsuspend for the error case. */ -END(__sigsuspend_nocancel) -#endif /* NO_CANCELLATION */ - #include <sysdep-cancel.h> #undef PSEUDO_PREPARE_ARGS |