[PATCH] Fix error path in mips pipe, syscall

Atsushi Nemoto anemo at mba.ocn.ne.jp
Thu Aug 16 15:47:52 UTC 2007


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.

-------------- next part --------------
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, at 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, at 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


More information about the uClibc mailing list