Browse Source

Upstream fix for syscall() not setting errno on errors on MIPS

SVN-Revision: 14689
Steven Barth 17 years ago
parent
commit
e805b29fdd
1 changed files with 31 additions and 0 deletions
  1. 31 0
      toolchain/uClibc/patches/160-mips_syscall.patch

+ 31 - 0
toolchain/uClibc/patches/160-mips_syscall.patch

@@ -0,0 +1,31 @@
+--- uClibc-0.9.29.orig/libc/sysdeps/linux/mips/syscall.S	2009-02-27 19:26:57.420288905 +0100
++++ uClibc-0.9.29/libc/sysdeps/linux/mips/syscall.S	2009-02-27 19:43:18.000000000 +0100
+@@ -29,6 +29,9 @@
+ .type   syscall,@function
+ .ent    syscall
+ syscall:
++#ifdef __PIC__
++	SETUP_GP
++#endif
+ 	move	v0, a0		/* Load system call number from first arg.  */
+ 	move	a0, a1		/* Move the next three args up a register.  */
+ 	move	a1, a2
+@@ -60,6 +63,18 @@
+ #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__
++	SETUP_GP64(v0, syscall)
++	PTR_LA	t9, __syscall_error
++	RESTORE_GP64
++	jr	t9
++#else
++	j	__syscall_error
++#endif
+ .end    syscall
+ .size   syscall,.-syscall