1 /* POSIX.1 sigaction call for Linux/SPARC64.
2 Copyright (C) 1997-2000,2002,2003,2005 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4 Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx) and
5 Jakub Jelinek (jj@ultra.linux.cz).
7 The GNU C Library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
12 The GNU C Library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public
18 License along with the GNU C Library; if not, write to the Free
19 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
25 #include <sys/signal.h>
28 #include <kernel_sigaction.h>
30 /* SPARC 64bit userland requires a kernel that has rt signals anyway. */
32 static void __rt_sigreturn_stub (void);
35 __libc_sigaction (int sig
, __const
struct sigaction
*act
,
36 struct sigaction
*oact
)
39 struct kernel_sigaction kact
, koact
;
40 unsigned long stub
= ((unsigned long) &__rt_sigreturn_stub
) - 8;
44 kact
.k_sa_handler
= act
->sa_handler
;
45 memcpy (&kact
.sa_mask
, &act
->sa_mask
, sizeof (sigset_t
));
46 kact
.sa_flags
= act
->sa_flags
;
47 kact
.sa_restorer
= NULL
;
50 /* XXX The size argument hopefully will have to be changed to the
51 real size of the user-level sigset_t. */
52 ret
= INLINE_SYSCALL (rt_sigaction
, 5, sig
,
53 act
? __ptrvalue (&kact
) : 0,
54 oact
? __ptrvalue (&koact
) : 0, stub
, _NSIG
/ 8);
58 oact
->sa_handler
= koact
.k_sa_handler
;
59 memcpy (&oact
->sa_mask
, &koact
.sa_mask
, sizeof (sigset_t
));
60 oact
->sa_flags
= koact
.sa_flags
;
61 oact
->sa_restorer
= koact
.sa_restorer
;
66 libc_hidden_def (__libc_sigaction
)
68 #ifdef WRAPPER_INCLUDE
69 # include WRAPPER_INCLUDE
72 #ifndef LIBC_SIGACTION
73 weak_alias (__libc_sigaction
, __sigaction
);
74 libc_hidden_weak (__sigaction
)
75 weak_alias (__libc_sigaction
, sigaction
);
79 __rt_sigreturn_stub (void)
81 __asm__ ("mov %0, %%g1\n\t"
84 : "i" (__NR_rt_sigreturn
));