svn commit: trunk/uClibc/libc/sysdeps/linux/mips

psm at uclibc.org psm at uclibc.org
Thu Jan 26 10:54:12 UTC 2006


Author: psm
Date: 2006-01-26 02:54:11 -0800 (Thu, 26 Jan 2006)
New Revision: 13615

Log:
Correct mips, does mips ever be similar to others ;-(

Modified:
   trunk/uClibc/libc/sysdeps/linux/mips/__longjmp.c


Changeset:
Modified: trunk/uClibc/libc/sysdeps/linux/mips/__longjmp.c
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/mips/__longjmp.c	2006-01-26 10:46:14 UTC (rev 13614)
+++ trunk/uClibc/libc/sysdeps/linux/mips/__longjmp.c	2006-01-26 10:54:11 UTC (rev 13615)
@@ -21,65 +21,64 @@
 #include <setjmp.h>
 #include <stdlib.h>
 
-
-extern __typeof(longjmp) __longjmp;
-libc_hidden_proto(__longjmp)
-
 #ifndef	__GNUC__
   #error This file uses GNU C extensions; you must compile with GCC.
 #endif
 
-void __longjmp (__jmp_buf env, int val_arg)
+extern void __longjmp (__jmp_buf __env, int __val) attribute_noreturn;
+libc_hidden_proto(__longjmp)
+
+void attribute_noreturn __longjmp (__jmp_buf env, int val_arg)
 {
     /* gcc 1.39.19 miscompiled the longjmp routine (as it did setjmp before
        the hack around it); force it to use $a1 for the longjmp value.
        Without this it saves $a1 in a register which gets clobbered
        along the way.  */
-    register int val asm ("a1");
+    register int val __asm__ ("a1");
 
     /* Pull back the floating point callee-saved registers.  */
 #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
-    asm volatile ("l.d $f20, %0" : : "m" (env[0].__fpregs[0]));
-    asm volatile ("l.d $f22, %0" : : "m" (env[0].__fpregs[1]));
-    asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[2]));
-    asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[3]));
-    asm volatile ("l.d $f28, %0" : : "m" (env[0].__fpregs[4]));
-    asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[5]));
+    __asm__ __volatile__ ("l.d $f20, %0" : : "m" (env[0].__fpregs[0]));
+    __asm__ __volatile__ ("l.d $f22, %0" : : "m" (env[0].__fpregs[1]));
+    __asm__ __volatile__ ("l.d $f24, %0" : : "m" (env[0].__fpregs[2]));
+    __asm__ __volatile__ ("l.d $f26, %0" : : "m" (env[0].__fpregs[3]));
+    __asm__ __volatile__ ("l.d $f28, %0" : : "m" (env[0].__fpregs[4]));
+    __asm__ __volatile__ ("l.d $f30, %0" : : "m" (env[0].__fpregs[5]));
 
     /* Get and reconstruct the floating point csr.  */
-    asm volatile ("lw $2, %0" : : "m" (env[0].__fpc_csr));
-    asm volatile ("ctc1 $2, $31");
+    __asm__ __volatile__ ("lw $2, %0" : : "m" (env[0].__fpc_csr));
+    __asm__ __volatile__ ("ctc1 $2, $31");
 #endif
 
     /* Get the GP. */
-    asm volatile ("lw $gp, %0" : : "m" (env[0].__gp));
+    __asm__ __volatile__ ("lw $gp, %0" : : "m" (env[0].__gp));
 
     /* Get the callee-saved registers.  */
-    asm volatile ("lw $16, %0" : : "m" (env[0].__regs[0]));
-    asm volatile ("lw $17, %0" : : "m" (env[0].__regs[1]));
-    asm volatile ("lw $18, %0" : : "m" (env[0].__regs[2]));
-    asm volatile ("lw $19, %0" : : "m" (env[0].__regs[3]));
-    asm volatile ("lw $20, %0" : : "m" (env[0].__regs[4]));
-    asm volatile ("lw $21, %0" : : "m" (env[0].__regs[5]));
-    asm volatile ("lw $22, %0" : : "m" (env[0].__regs[6]));
-    asm volatile ("lw $23, %0" : : "m" (env[0].__regs[7]));
+    __asm__ __volatile__ ("lw $16, %0" : : "m" (env[0].__regs[0]));
+    __asm__ __volatile__ ("lw $17, %0" : : "m" (env[0].__regs[1]));
+    __asm__ __volatile__ ("lw $18, %0" : : "m" (env[0].__regs[2]));
+    __asm__ __volatile__ ("lw $19, %0" : : "m" (env[0].__regs[3]));
+    __asm__ __volatile__ ("lw $20, %0" : : "m" (env[0].__regs[4]));
+    __asm__ __volatile__ ("lw $21, %0" : : "m" (env[0].__regs[5]));
+    __asm__ __volatile__ ("lw $22, %0" : : "m" (env[0].__regs[6]));
+    __asm__ __volatile__ ("lw $23, %0" : : "m" (env[0].__regs[7]));
 
     /* Get the PC.  */
-    asm volatile ("lw $25, %0" : : "m" (env[0].__pc));
+    __asm__ __volatile__ ("lw $25, %0" : : "m" (env[0].__pc));
 
     /* Restore the stack pointer and the FP.  They have to be restored
        last and in a single asm as gcc, depending on options used, may
        use either of them to access env.  */
-    asm volatile ("lw $29, %0\n\t"
+    __asm__ __volatile__ ("lw $29, %0\n\t"
 	    "lw $30, %1\n\t" : : "m" (env[0].__sp), "m" (env[0].__fp));
 
     /* Give setjmp 1 if given a 0, or what they gave us if non-zero.  */
     if (val == 0)
-	asm volatile ("li $2, 1");
+	__asm__ __volatile__ ("li $2, 1");
     else
-	asm volatile ("move $2, %0" : : "r" (val));
+	__asm__ __volatile__ ("move $2, %0" : : "r" (val));
 
-    asm volatile ("jr $25");
+    __asm__ __volatile__ ("jr $25");
 
     /* Avoid `volatile function does return' warnings.  */
     for (;;);




More information about the uClibc-cvs mailing list