about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/i386/sigaction.c15
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));