From 62ac74d3f2b957bc91f91a03d93fa523e9a80c9f Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 15 Sep 2007 07:25:54 +0000 Subject: 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. --- libc/sysdeps/linux/mips/pipe.S | 6 ++++++ libc/sysdeps/linux/mips/syscall.S | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'libc') diff --git a/libc/sysdeps/linux/mips/pipe.S b/libc/sysdeps/linux/mips/pipe.S index dd1aed1b2..8b3023679 100644 --- a/libc/sysdeps/linux/mips/pipe.S +++ b/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 diff --git a/libc/sysdeps/linux/mips/syscall.S b/libc/sysdeps/linux/mips/syscall.S index 683529596..ff6f3d1b4 100644 --- a/libc/sysdeps/linux/mips/syscall.S +++ b/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 -- cgit v1.2.3