yuezonghe | 824eb0c | 2024-06-27 02:32:26 -0700 | [diff] [blame^] | 1 | /* pipe system call for Linux/MIPS */ |
| 2 | /* |
| 3 | * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> |
| 4 | * |
| 5 | * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. |
| 6 | */ |
| 7 | |
| 8 | /*see uClibc's sh/pipe.c and glibc-2.2.4's mips/pipe.S */ |
| 9 | |
| 10 | #include <features.h> |
| 11 | #include <sys/asm.h> |
| 12 | #include <asm/unistd.h> |
| 13 | #include <sys/regdef.h> |
| 14 | |
| 15 | .globl pipe |
| 16 | .ent pipe, 0 |
| 17 | .type pipe,@function |
| 18 | pipe: |
| 19 | #ifdef __PIC__ |
| 20 | SETUP_GP |
| 21 | #endif |
| 22 | li v0,__NR_pipe |
| 23 | syscall |
| 24 | bnez a3, 1f |
| 25 | sw v0, 0(a0) |
| 26 | sw v1, 4(a0) |
| 27 | li v0, 0 |
| 28 | j ra |
| 29 | 1: |
| 30 | /* uClibc change -- start */ |
| 31 | move a0,v0 /* Pass return val to C function. */ |
| 32 | /* uClibc change -- stop */ |
| 33 | |
| 34 | #ifdef __PIC__ |
| 35 | SETUP_GP64(v0, pipe) |
| 36 | PTR_LA t9, __syscall_error |
| 37 | RESTORE_GP64 |
| 38 | jr t9 |
| 39 | #else |
| 40 | j __syscall_error |
| 41 | #endif |
| 42 | 1: |
| 43 | .end pipe |
| 44 | .size pipe,.-pipe |
| 45 | libc_hidden_def(pipe) |