| /* 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 <features.h> |
| #include <sys/asm.h> |
| #include <asm/unistd.h> |
| #include <sys/regdef.h> |
| |
| .globl pipe |
| .ent pipe, 0 |
| .type pipe,@function |
| pipe: |
| #ifdef __PIC__ |
| SETUP_GP |
| #endif |
| li v0,__NR_pipe |
| syscall |
| bnez a3, 1f |
| sw v0, 0(a0) |
| sw v1, 4(a0) |
| li v0, 0 |
| j ra |
| 1: |
| /* uClibc change -- start */ |
| move a0,v0 /* Pass return val to C function. */ |
| /* uClibc change -- stop */ |
| |
| #ifdef __PIC__ |
| SETUP_GP64(v0, pipe) |
| PTR_LA t9, __syscall_error |
| RESTORE_GP64 |
| jr t9 |
| #else |
| j __syscall_error |
| #endif |
| 1: |
| .end pipe |
| .size pipe,.-pipe |
| libc_hidden_def(pipe) |