فهرست منبع

Atsushi Nemoto writes:
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.

Mike Frysinger 16 سال پیش
والد
کامیت
62ac74d3f2
2فایلهای تغییر یافته به همراه11 افزوده شده و 1 حذف شده
  1. 6 0
      libc/sysdeps/linux/mips/pipe.S
  2. 5 1
      libc/sysdeps/linux/mips/syscall.S

+ 6 - 0
libc/sysdeps/linux/mips/pipe.S

@@ -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 @@ pipe:
 	/* uClibc change -- stop */
 
 #ifdef __PIC__
+	SETUP_GP64(v0, pipe)
 	PTR_LA	t9, __syscall_error
+	RESTORE_GP64
 	jr	t9
 #else
 	j	__syscall_error

+ 5 - 1
libc/sysdeps/linux/mips/syscall.S

@@ -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 @@ syscall:
 	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