summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/mips
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/mips')
-rw-r--r--libc/sysdeps/linux/mips/pipe.S60
-rw-r--r--libc/sysdeps/linux/mips/pipe.c30
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)