From e77dfaab537fb6e94bf5c799ec8a845252f4cbd4 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 30 Jan 2003 23:46:32 +0000 Subject: Patch from Marshall M. Midden @ brecis.com: pipe.c for mips was broken with freeswan. No error checking. --- libc/sysdeps/linux/mips/Makefile | 4 ++-- libc/sysdeps/linux/mips/pipe.S | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 libc/sysdeps/linux/mips/pipe.S diff --git a/libc/sysdeps/linux/mips/Makefile b/libc/sysdeps/linux/mips/Makefile index e207ae2d0..85c605aa8 100644 --- a/libc/sysdeps/linux/mips/Makefile +++ b/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) diff --git a/libc/sysdeps/linux/mips/pipe.S b/libc/sysdeps/linux/mips/pipe.S new file mode 100644 index 000000000..039b24305 --- /dev/null +++ b/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 +#include +#include +#include +#include + + .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 -- cgit v1.2.3