]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/sysv/linux/alpha/rt_sigaction.S
Update to LGPL v2.1.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / alpha / rt_sigaction.S
CommitLineData
b112c02f 1/* Copyright (C) 1998 Free Software Foundation, Inc.
0b833ff4
RH
2 This file is part of the GNU C Library.
3 Contributed by Richard Henderson <rth@cygnus.com>, 1998
4
5 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
0b833ff4
RH
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 13 Lesser General Public License for more details.
0b833ff4 14
41bdb6e2
AJ
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, write to the Free
17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18 02111-1307 USA. */
b112c02f 19
0b833ff4 20#include <sysdep.h>
b112c02f 21
0b833ff4
RH
22/* On Alpha we desparately want to avoid having to issue an imb. Ordinarily
23 the kernel would have to issue one after setting up the signal return
24 stack, but the Linux rt_sigaction syscall is prepared to accept a pointer
b112c02f
UD
25 to the sigreturn syscall, instead of inlining it on the stack.
26
0b833ff4 27 This just about halves signal delivery time. */
b112c02f
UD
28
29#ifdef __NR_rt_sigaction
0b833ff4
RH
30 .text
31ENTRY(__syscall_rt_sigaction)
32 .frame sp,0,ra,0
33#ifdef PROF
34 ldgp gp,0(pv)
35 .set noat
36 lda AT, _mcount
37 jsr AT, (AT), _mcount
38 .set at
39#endif
ba3904fd
RH
40 /* Indicate non-standard use of our PV. */
41 .prologue 2
b112c02f 42
0b833ff4 43 beq a1, 0f
823bc652 44 ldl t0, 8(a1) # sa_flags
0b833ff4
RH
45 lda a4, sigreturn-__syscall_rt_sigaction(pv)
46 lda t1, rt_sigreturn-__syscall_rt_sigaction(pv)
47 and t0, 0x00000040, t0 # SA_SIGINFO
48 cmovne t0, t1, a4
823bc652 490: ldi v0,__NR_rt_sigaction
b112c02f 50 callsys
0b833ff4
RH
51 bne a3,1f
52 ret
b112c02f 53
823bc652
RH
541:
55#ifndef PROF
56 br gp,2f
0b833ff4 572: ldgp gp,0(gp)
823bc652 58#endif
0b833ff4
RH
59 jmp __syscall_error
60
61END(__syscall_rt_sigaction)
62
63 .align 5
64 .ent sigreturn
65sigreturn:
66 .prologue 0
67 mov sp,a0
68 ldi v0,__NR_sigreturn
69 callsys
70 .end sigreturn
71
72 .align 4
73 .ent rt_sigreturn
74rt_sigreturn:
75 .prologue 0
76 mov sp,a0
77 ldi v0,__NR_rt_sigreturn
78 callsys
79 .end rt_sigreturn
b112c02f
UD
80#else
81ENTRY(__syscall_rt_sigaction)
82 ldgp $29,0($27)
ba3904fd 83 .prologue 1
b112c02f
UD
84 ldi $0,ENOSYS
85 jmp __syscall_error
86END(__syscall_rt_sigaction)
87#endif