1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
1999-08-02  Jakub Jelinek  <jj@ultra.linux.cz>

	* sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c (__sigaction):
	Only allow rt signal frames. No SA_SIGINFO signals will have the
	siginfo_t just not filled out with SI_NOINFO code.
	* sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h
	(register_dump): Take the above change into account.
	* sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h
	(rt_signal_frame): Likewise.

	* sysdeps/unix/sysv/linux/sparc/getsysstats.c: New file.
This commit is contained in:
Ulrich Drepper
1999-08-02 20:04:56 +00:00
parent 249fd241a2
commit 7b19af6891
6 changed files with 96 additions and 34 deletions

View File

@ -32,24 +32,18 @@ extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *,
size_t);
static void __rt_sigreturn_stub (void);
static void __sigreturn_stub (void);
int
__sigaction (int sig, __const struct sigaction *act, struct sigaction *oact)
{
int ret;
struct kernel_sigaction kact, koact;
unsigned long stub = 0;
unsigned long stub = ((unsigned long) &__rt_sigreturn_stub) - 8;
if (act)
{
kact.k_sa_handler = act->sa_handler;
memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
if (((kact.sa_flags = act->sa_flags) & SA_SIGINFO) != 0)
stub = (unsigned long) &__rt_sigreturn_stub;
else
stub = (unsigned long) &__sigreturn_stub;
stub -= 8;
kact.sa_restorer = NULL;
}
@ -79,12 +73,3 @@ __rt_sigreturn_stub (void)
: /* no outputs */
: "i" (__NR_rt_sigreturn));
}
static void
__sigreturn_stub (void)
{
__asm__ ("mov %0, %%g1\n\t"
"ta 0x6d\n\t"
: /* no outputs */
: "i" (__NR_sigreturn));
}