signal: Use SA_SIGINFO (like glibc).

* lib/linux/signal.c (_restorer): Rename to...
(_restorer_for_siginfo): ...this.
(signal): Use it.  Use SA_SIGINFO.
This commit is contained in:
Danny Milosavljevic 2019-07-04 03:25:59 +02:00 committed by Jan Nieuwenhuizen
parent e8bbe21499
commit 02fdead244
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273

View file

@ -26,7 +26,7 @@
#if __i386__ #if __i386__
#else #else
void void
_restorer (void) _restorer_for_siginfo (void)
{ {
_sys_call (SYS_rt_sigreturn); _sys_call (SYS_rt_sigreturn);
} }
@ -44,12 +44,12 @@ signal (int signum, sighandler_t action)
unsigned short itembitcount; unsigned short itembitcount;
setup_action.sa_handler = action; setup_action.sa_handler = action;
setup_action.sa_restorer = _restorer; setup_action.sa_restorer = _restorer_for_siginfo;
bitindex = signum - 1; bitindex = signum - 1;
itembitcount = 8 * sizeof(setup_action.sa_mask.items[0]); itembitcount = 8 * sizeof(setup_action.sa_mask.items[0]);
setup_action.sa_mask.items[bitindex / itembitcount] = 1UL << (bitindex % itembitcount); setup_action.sa_mask.items[bitindex / itembitcount] = 1UL << (bitindex % itembitcount);
old.sa_handler = SIG_DFL; old.sa_handler = SIG_DFL;
setup_action.sa_flags = SA_RESTORER | SA_RESTART; setup_action.sa_flags = SA_RESTORER | SA_RESTART | SA_SIGINFO;
int r = _sys_call4 (SYS_rt_sigaction, signum, &setup_action, &old, sizeof (sigset_t)); int r = _sys_call4 (SYS_rt_sigaction, signum, &setup_action, &old, sizeof (sigset_t));
if (r) if (r)
return 0; return 0;