1 /* Copyright (C) 1992-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library. If not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 #include <sysdeps/unix/mips/sysdep.h> 19 20 #ifdef __ASSEMBLER__ 21 #include <sys/asm.h> 22 23 /* Note that while it's better structurally, going back to call __syscall_error 24 can make things confusing if you're debugging---it looks like it's jumping 25 backwards into the previous fn. */ 26 #ifdef __PIC__ 27 #define PSEUDO(name, syscall_name, args) \ 28 .align 2; \ 29 .set nomips16; \ 30 cfi_startproc; \ 31 99:; \ 32 .set noat; \ 33 .cpsetup t9, $1, name; \ 34 cfi_register (gp, $1); \ 35 .set at; \ 36 PTR_LA t9,__syscall_error; \ 37 .cpreturn; \ 38 cfi_restore (gp); \ 39 jr t9; \ 40 cfi_endproc; \ 41 ENTRY(name) \ 42 li v0, SYS_ify(syscall_name); \ 43 syscall; \ 44 bne a3, zero, 99b; \ 45 L(syse1): 46 #else 47 #define PSEUDO(name, syscall_name, args) \ 48 .set noreorder; \ 49 .align 2; \ 50 .set nomips16; \ 51 cfi_startproc; \ 52 99: j __syscall_error; \ 53 nop; \ 54 cfi_endproc; \ 55 ENTRY(name) \ 56 .set noreorder; \ 57 li v0, SYS_ify(syscall_name); \ 58 syscall; \ 59 .set reorder; \ 60 bne a3, zero, 99b; \ 61 L(syse1): 62 #endif 63 64 #endif 65