(rt_sigreturn): Make compatible with older kernels.

This commit is contained in:
Ulrich Drepper 1998-02-17 15:26:57 +00:00
parent d7d1f4badd
commit 09e8bdd3cd
1 changed files with 17 additions and 10 deletions

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1998 Free Software Foundation, Inc. /* Copyright (C) 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@cygnus.com>, 1998 Contributed by Richard Henderson <rth@cygnus.com>, 1998
@ -16,17 +16,17 @@
License along with the GNU C Library; see the file COPYING.LIB. If not, License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#include <sysdep.h> #include <sysdep.h>
/* On Alpha we desparately want to avoid having to issue an imb. Ordinarily /* On Alpha we desparately want to avoid having to issue an imb. Ordinarily
the kernel would have to issue one after setting up the signal return the kernel would have to issue one after setting up the signal return
stack, but the Linux rt_sigaction syscall is prepared to accept a pointer stack, but the Linux rt_sigaction syscall is prepared to accept a pointer
to the sigreturn syscall, instead of inlining it on the stack. to the sigreturn syscall, instead of inlining it on the stack.
This just about halves signal delivery time. */ This just about halves signal delivery time. */
#ifdef __NR_rt_sigaction
.text .text
ENTRY(__syscall_rt_sigaction) ENTRY(__syscall_rt_sigaction)
.frame sp,0,ra,0 .frame sp,0,ra,0
@ -38,7 +38,7 @@ ENTRY(__syscall_rt_sigaction)
.set at .set at
#endif #endif
.prologue 1 .prologue 1
beq a1, 0f beq a1, 0f
ldl t0, 8(a1) # sa_flags ldl t0, 8(a1) # sa_flags
lda a4, sigreturn-__syscall_rt_sigaction(pv) lda a4, sigreturn-__syscall_rt_sigaction(pv)
@ -46,10 +46,10 @@ ENTRY(__syscall_rt_sigaction)
and t0, 0x00000040, t0 # SA_SIGINFO and t0, 0x00000040, t0 # SA_SIGINFO
cmovne t0, t1, a4 cmovne t0, t1, a4
0: ldi v0,__NR_rt_sigaction 0: ldi v0,__NR_rt_sigaction
callsys callsys
bne a3,1f bne a3,1f
ret ret
1: 1:
#ifndef PROF #ifndef PROF
br gp,2f br gp,2f
@ -76,3 +76,10 @@ rt_sigreturn:
ldi v0,__NR_rt_sigreturn ldi v0,__NR_rt_sigreturn
callsys callsys
.end rt_sigreturn .end rt_sigreturn
#else
ENTRY(__syscall_rt_sigaction)
ldgp $29,0($27)
ldi $0,ENOSYS
jmp __syscall_error
END(__syscall_rt_sigaction)
#endif