mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-11 03:40:06 +00:00
alpha: Create __syscall_nocancel entry points
This commit is contained in:
parent
ab21431318
commit
e184a918bb
@ -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):
|
||||
|
@ -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); \
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user