1/* Static library error handling code fragment for Nios II. 2 Copyright (C) 2015-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public License as 7 published by the Free Software Foundation; either version 2.1 of the 8 License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19#include <sysdep.h> 20 21/* The following code is only used in the static library. In the shared 22 library, the error handling code is at the end of each function. */ 23 24#ifndef PIC 25 26/* In the static library, the syscall stubs jump here when they detect 27 an error. */ 28 29# undef CALL_MCOUNT 30# define CALL_MCOUNT /* Don't insert the profiling call, it clobbers r2. */ 31 32# if IS_IN (libc) 33# define SYSCALL_ERROR_ERRNO __libc_errno 34# else 35# define SYSCALL_ERROR_ERRNO errno 36# endif 37 .text 38ENTRY (__syscall_error) 39 nextpc r3 401: 41 movhi r8, %hiadj(_gp_got - 1b) 42 addi r8, r8, %lo(_gp_got - 1b) 43 add r3, r3, r8 44 ldw r3, %tls_ie(SYSCALL_ERROR_ERRNO)(r3) 45 add r3, r23, r3 46 stw r2, 0(r3) 47 movi r2, -1 48 ret 49END (__syscall_error) 50#endif 51