[PATCH] pull missing parts for mips N32/N64 from glibc

Atsushi Nemoto anemo at mba.ocn.ne.jp
Wed Jul 5 16:15:42 UTC 2006


On Wed, 5 Jul 2006 17:11:54 +0200 (CEST), "Peter S. Mazinger" <ps.m at gmx.net> wrote:
> please do s/asm/__asm__/ (else compiling w/ -std=c99 breaks)

Thanks for your comment.  Updated.

diff -urNp uClibc-20060611/libc/sysdeps/linux/mips/sigaction.c uClibc/libc/sysdeps/linux/mips/sigaction.c
--- uClibc-20060611/libc/sysdeps/linux/mips/sigaction.c	2006-06-11 16:11:26.000000000 +0900
+++ uClibc/libc/sysdeps/linux/mips/sigaction.c	2006-07-05 22:04:44.000000000 +0900
@@ -33,6 +33,16 @@ extern __typeof(sigaction) __libc_sigact
 
 libc_hidden_proto(memcpy)
 
+#if _MIPS_SIM != _ABIO32
+
+# ifdef __NR_rt_sigreturn
+static void restore_rt (void) __asm__ ("__restore_rt");
+# endif
+# ifdef __NR_sigreturn
+static void restore (void) __asm__ ("__restore");
+# endif
+#endif
+
 /* If ACT is not NULL, change the action for SIG to *ACT.
    If OACT is not NULL, put the old action for SIG in *OACT.  */
 int __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
@@ -119,3 +129,31 @@ libc_hidden_proto(sigaction)
 weak_alias(__libc_sigaction,sigaction)
 libc_hidden_weak(sigaction)
 #endif
+
+/* NOTE: Please think twice before making any changes to the bits of
+   code below.  GDB needs some intimate knowledge about it to
+   recognize them as signal trampolines, and make backtraces through
+   signal handlers work right.  Important are both the names
+   (__restore_rt) and the exact instruction sequence.
+   If you ever feel the need to make any changes, please notify the
+   appropriate GDB maintainer.  */
+
+#define RESTORE(name, syscall) RESTORE2 (name, syscall)
+#define RESTORE2(name, syscall) \
+__asm__						\
+  (						\
+   ".align 4\n"					\
+   "__" #name ":\n"				\
+   "	li $2, " #syscall "\n"			\
+   "	syscall\n"				\
+   );
+
+/* The return code for realtime-signals.  */
+#if _MIPS_SIM != _ABIO32
+# ifdef __NR_rt_sigreturn
+RESTORE (restore_rt, __NR_rt_sigreturn)
+# endif
+# ifdef __NR_sigreturn
+RESTORE (restore, __NR_sigreturn)
+# endif
+#endif



More information about the uClibc mailing list