diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/nptl/sysdep-cancel.h | 24 |
1 files changed, 16 insertions, 8 deletions
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); \ |