alpha: Create __syscall_nocancel entry points
authorRichard Henderson <rth@twiddle.net>
Sat, 17 May 2014 18:25:19 +0000 (11:25 -0700)
committerRichard Henderson <rth@twiddle.net>
Sat, 17 May 2014 18:25:19 +0000 (11:25 -0700)
ChangeLog
sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h
sysdeps/unix/sysv/linux/alpha/sigsuspend.S

index 6223f79..7b1feb6 100644 (file)
--- 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):
index 610b583..69809bc 100644 (file)
 
 # 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);                                      \
index aa5e6c6..8a6816e 100644 (file)
 /* 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