Browse Source

Patch from Marshall M. Midden @ brecis.com:
pipe.c for mips was broken with freeswan. No error checking.

Eric Andersen 21 years ago
parent
commit
e77dfaab53
2 changed files with 41 additions and 2 deletions
  1. 2 2
      libc/sysdeps/linux/mips/Makefile
  2. 39 0
      libc/sysdeps/linux/mips/pipe.S

+ 2 - 2
libc/sysdeps/linux/mips/Makefile

@@ -23,10 +23,10 @@ ASFLAGS=$(CFLAGS)
 CRT0_SRC = crt0.S
 CRT0_OBJ = crt0.o crt1.o
 
-SSRC=bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S fork.S syscall.S
+SSRC=bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S fork.S syscall.S pipe.S
 SOBJS=$(patsubst %.S,%.o, $(SSRC))
 
-CSRC=__longjmp.c  brk.c vfork.c setjmp_aux.c _mmap.c pipe.c __syscall_error.c cacheflush.c
+CSRC=__longjmp.c  brk.c vfork.c setjmp_aux.c _mmap.c __syscall_error.c cacheflush.c
 COBJS=$(patsubst %.c,%.o, $(CSRC))
 
 OBJS=$(SOBJS) $(MOBJ) $(COBJS)

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

@@ -0,0 +1,39 @@
+/* pipe system call for Linux/MIPS */
+
+/*see uClibc's sh/pipe.c and glibc-2.2.4's mips/pipe.S */
+
+#include <features.h>
+#include <asm/asm.h>
+#include <asm/unistd.h>
+#include <asm/mipsregs.h>
+#include <asm/regdef.h>
+
+        .globl  pipe
+        .ent    pipe, 0
+pipe:
+#ifdef PROF
+        .set            noat
+        move            $1,ra
+        subu            sp,sp,8         # _mcount pops 2 words from  stack
+        jal             _mcount
+        .set            at
+#endif
+        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
+1:
+        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