diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/mips/Makefile | 4 | ||||
| -rw-r--r-- | libc/sysdeps/linux/mips/pipe.S | 39 | 
2 files changed, 41 insertions, 2 deletions
| 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 <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 | 
