alpha: Create __syscall_nocancel entry points

This commit is contained in:
Richard Henderson 2014-05-17 11:25:19 -07:00
parent ab21431318
commit e184a918bb
3 changed files with 23 additions and 21 deletions

View File

@ -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):

View File

@ -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); \

View File

@ -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