I discovered yesterday that the syscall() function on MIPS does not
set errno.  While checking the other assembly syscall implementations
I also found that pipe set errno to a bogus value.  This patch fixes it.

-- 
Daniel Jacobowitz
CodeSourcery

---
 libc/sysdeps/linux/mips/pipe.S    |   15 ++++++++++-----
 libc/sysdeps/linux/mips/syscall.S |   10 ++++++++++
 2 files changed, 20 insertions(+), 5 deletions(-)

Index: uclibc-0.9.29/libc/sysdeps/linux/mips/pipe.S
===================================================================
--- uclibc-0.9.29.orig/libc/sysdeps/linux/mips/pipe.S   2007-01-18 
12:33:11.000000000 -0800
+++ uclibc-0.9.29/libc/sysdeps/linux/mips/pipe.S        2007-05-21 
12:26:44.000000000 -0700
@@ -17,7 +17,16 @@
 pipe:
        li      v0,__NR_pipe
        syscall
-       beqz    a3, 1f
+       bnez    a3, 1f
+       sw      v0, 0(a0)
+       sw      v1, 4(a0)
+       li      v0, 0
+       j       ra
+1:
+       /* uClibc change -- start */
+       move            a0,v0           /* Pass return val to C function. */
+       /* uClibc change -- stop */
+
 #ifdef __PIC__
        PTR_LA  t9, __syscall_error
        jr      t9
@@ -25,10 +34,6 @@ pipe:
        j       __syscall_error
 #endif
 1:
-       sw      v0, 0(a0)
-       sw      v1, 4(a0)
-       li      v0, 0
-       j       ra
        .end    pipe
        .size   pipe,.-pipe
 libc_hidden_def(pipe)
Index: uclibc-0.9.29/libc/sysdeps/linux/mips/syscall.S
===================================================================
--- uclibc-0.9.29.orig/libc/sysdeps/linux/mips/syscall.S        2007-01-18 
12:33:11.000000000 -0800
+++ uclibc-0.9.29/libc/sysdeps/linux/mips/syscall.S     2007-05-21 
12:28:08.000000000 -0700
@@ -60,6 +60,16 @@ syscall:
 #else
        addiu   sp,sp,32
 #endif
+       bnez    a3, 1f
        j ra                    /* Return to caller.  */
+1:
+       move            a0,v0           /* Pass return val to C function. */
+
+#ifdef __PIC__
+       PTR_LA  t9, __syscall_error
+       jr      t9
+#else
+       j       __syscall_error
+#endif
 .end    syscall
 .size   syscall,.-syscall
_______________________________________________
uClibc mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/uclibc

Reply via email to