1 /* Copyright (C) 1992-2021 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 /* Note that while it's better structurally, going back to call __syscall_error 21 can make things confusing if you're debugging---it looks like it's jumping 22 backwards into the previous fn. */ 23 #ifdef __PIC__ 24 #define PSEUDO(name, syscall_name, args) \ 25 .align 2; \ 26 .set nomips16; \ 27 cfi_startproc; \ 28 99: la t9,__syscall_error; \ 29 jr t9; \ 30 cfi_endproc; \ 31 ENTRY(name) \ 32 .set noreorder; \ 33 .cpload t9; \ 34 li v0, SYS_ify(syscall_name); \ 35 syscall; \ 36 .set reorder; \ 37 bne a3, zero, 99b; \ 38 L(syse1): 39 #else 40 #define PSEUDO(name, syscall_name, args) \ 41 .set noreorder; \ 42 .set nomips16; \ 43 .align 2; \ 44 cfi_startproc; \ 45 99: j __syscall_error; \ 46 nop; \ 47 cfi_endproc; \ 48 ENTRY(name) \ 49 .set noreorder; \ 50 li v0, SYS_ify(syscall_name); \ 51 syscall; \ 52 .set reorder; \ 53 bne a3, zero, 99b; \ 54 L(syse1): 55 #endif 56