diff options
Diffstat (limited to 'libc')
-rw-r--r-- | libc/sysdeps/linux/mips/pipe.S | 60 | ||||
-rw-r--r-- | libc/sysdeps/linux/mips/pipe.c | 30 |
2 files changed, 34 insertions, 56 deletions
diff --git a/libc/sysdeps/linux/mips/pipe.S b/libc/sysdeps/linux/mips/pipe.S index e58b530dc..f80002118 100644 --- a/libc/sysdeps/linux/mips/pipe.S +++ b/libc/sysdeps/linux/mips/pipe.S @@ -1,9 +1,4 @@ /* pipe system call for Linux/MIPS */ -/* - * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> - * - * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. - */ /*see uClibc's sh/pipe.c and glibc-2.2.4's mips/pipe.S */ @@ -13,26 +8,39 @@ #include <asm/regdef.h> .globl pipe - .ent pipe, 0 -pipe: - addiu sp,sp,-24 - sw a0,16(sp) - li v0,__NR_pipe - syscall - beqz a3, 1f - la t3, errno - sw v0, (t3) - li v0, -1 - b 2f + .globl __pipe + .hidden __pipe + .ent __pipe, 0 +__pipe: + .frame sp, 24, sp +#ifdef __PIC__ + .set noreorder + .cpload $25 + .set reorder + addiu sp,sp,-24 + .cprestore 16 +#else + addiu sp,sp,-24 +#endif + sw a0,16(sp) + li v0,__NR_pipe + syscall + beqz a3, 1f +#ifdef __PIC__ + la t0, __syscall_error + jr t9 +#else + j __syscall_error +#endif 1: - lw a0, 16(sp) - sw v0, 0(a0) - sw v1, 4(a0) - li v0, 0 + lw a0, 16(sp) + sw v0, 0(a0) + sw v1, 4(a0) + li v0, 0 2: - addiu sp,sp,24 - j ra - .end pipe - .size pipe,.-pipe - -libc_hidden_def(pipe) + addiu sp,sp,24 + j ra + .end __pipe + .size __pipe,.-__pipe + .weak pipe + pipe = __pipe diff --git a/libc/sysdeps/linux/mips/pipe.c b/libc/sysdeps/linux/mips/pipe.c deleted file mode 100644 index bfca4b60d..000000000 --- a/libc/sysdeps/linux/mips/pipe.c +++ /dev/null @@ -1,30 +0,0 @@ -/* pipe system call for Linux/MIPS */ -/* - * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> - * - * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. - */ -/*see uClibc's sh/pipe.c and glibc-2.2.4's mips/pipe.S */ - -#include <errno.h> -#include <unistd.h> -#include <syscall.h> - -libc_hidden_proto(pipe) - -int pipe(int *fd) -{ - register long int res __asm__ ("$2"); // v0 - register long int res2 __asm__ ("$3"); // v1 - - asm ("move\t$4,%2\n\t" // $4 = a0 - "syscall" /* Perform the system call. */ - : "=r" (res) - : "0" (__NR_pipe), "r" (fd) - : "$4", "$7"); - - fd[0] = res; - fd[1] = res2; - return(0); -} -libc_hidden_def(pipe) |