In MIPS syscall(2), .cpload was added to an the error path, but it was
not enough for ABIs other then O32.  Use SETUP_GP, SETUP_GP64 and
RESTORE_GP64 to handle all ABIs.  This patch fixes an error path of
MIPS pipe(2) too.

diff -u uClibc.org/libc/sysdeps/linux/mips/pipe.S 
uClibc/libc/sysdeps/linux/mips/pipe.S
--- uClibc.org/libc/sysdeps/linux/mips/pipe.S   2007-05-24 23:09:35.000000000 
+0900
+++ uClibc/libc/sysdeps/linux/mips/pipe.S       2007-08-17 00:37:54.000000000 
+0900
@@ -14,7 +14,11 @@
 
        .globl  pipe
        .ent    pipe, 0
+       .type pipe,@function
 pipe:
+#ifdef __PIC__
+       SETUP_GP
+#endif
        li      v0,__NR_pipe
        syscall
        bnez    a3, 1f
@@ -28,7 +32,9 @@
        /* uClibc change -- stop */
 
 #ifdef __PIC__
+       SETUP_GP64(v0, pipe)
        PTR_LA  t9, __syscall_error
+       RESTORE_GP64
        jr      t9
 #else
        j       __syscall_error
diff -u uClibc.org/libc/sysdeps/linux/mips/syscall.S 
uClibc/libc/sysdeps/linux/mips/syscall.S
--- uClibc.org/libc/sysdeps/linux/mips/syscall.S        2007-07-18 
23:39:23.000000000 +0900
+++ uClibc/libc/sysdeps/linux/mips/syscall.S    2007-08-17 00:37:54.000000000 
+0900
@@ -29,8 +29,10 @@
 .type   syscall,@function
 .ent    syscall
 syscall:
+#ifdef __PIC__
+       SETUP_GP
+#endif
        .set noreorder
-       .cpload t9;
        move    v0, a0          /* Load system call number from first arg.  */
        move    a0, a1          /* Move the next three args up a register.  */
        move    a1, a2
@@ -68,7 +70,9 @@
        move    a0,v0           /* Pass return val to C function. */
 
 #ifdef __PIC__
+       SETUP_GP64(v0, syscall)
        PTR_LA  t9, __syscall_error
+       RESTORE_GP64
        jr      t9
 #else
        j       __syscall_error
_______________________________________________
uClibc mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/uclibc

Reply via email to