diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/sigaction.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c index 8e5ac84dcf..57634c1c98 100644 --- a/sysdeps/unix/sysv/linux/i386/sigaction.c +++ b/sysdeps/unix/sysv/linux/i386/sigaction.c @@ -46,10 +46,19 @@ extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *__unbound int __libc_missing_rt_sigs; #endif -#ifdef __NR_rt_sigaction +/* Using the hidden attribute here does not change the code but it + helps to avoid warnings. */ +#if defined HAVE_HIDDEN && !defined HAVE_BROKEN_VISIBILITY_ATTRIBUTE +# ifdef __NR_rt_sigaction +extern void restore_rt (void) asm ("__restore_rt") attribute_hidden; +# endif +extern void restore (void) asm ("__restore") attribute_hidden; +#else +# ifdef __NR_rt_sigaction static void restore_rt (void) asm ("__restore_rt"); -#endif +# endif static void restore (void) asm ("__restore"); +#endif /* If ACT is not NULL, change the action for SIG to *ACT. @@ -126,7 +135,7 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) "int $0x80\n" "popl %%ebx" : "=a" (result) - : "0" (SYS_ify (sigaction)), "r" (sig), + : "0" (SYS_ify (sigaction)), "mr" (sig), "c" (act ? __ptrvalue (&k_newact) : 0), "d" (oact ? __ptrvalue (&k_oldact) : 0)); |