From e184a918bb5866a6488257d37ecc4e4ff747b7b7 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 17 May 2014 11:25:19 -0700 Subject: [PATCH] alpha: Create __syscall_nocancel entry points --- ChangeLog | 7 +++++++ sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h | 24 ++++++++++++++-------- sysdeps/unix/sysv/linux/alpha/sigsuspend.S | 13 ------------ 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6223f79..7b1feb6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-05-17 Richard Henderson + + * 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 * 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 610b583..69809bc 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 aa5e6c6..8a6816e 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 - -#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 #undef PSEUDO_PREPARE_ARGS -- 2.7.4