1 /* Copyright (C) 2005-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 #ifndef _LINK_H 19 # error "Never include <bits/link.h> directly; use <link.h> instead." 20 #endif 21 22 #include <sgidefs.h> 23 24 #if _MIPS_SIM == _ABIO32 25 26 /* Registers for entry into PLT on MIPS. */ 27 typedef struct La_mips_32_regs 28 { 29 uint32_t lr_reg[4]; /* $a0 through $a3 */ 30 double lr_fpreg[2]; /* $f12 and $f14 */ 31 uint32_t lr_ra; 32 uint32_t lr_sp; 33 } La_mips_32_regs; 34 35 /* Return values for calls from PLT on MIPS. */ 36 typedef struct La_mips_32_retval 37 { 38 uint32_t lrv_v0; 39 uint32_t lrv_v1; 40 double lrv_f0; 41 double lrv_f2; 42 } La_mips_32_retval; 43 44 #else 45 46 typedef struct La_mips_64_regs 47 { 48 uint64_t lr_reg[8]; /* $a0 through $a7 */ 49 double lr_fpreg[8]; /* $f12 throgh $f19 */ 50 uint64_t lr_ra; 51 uint64_t lr_sp; 52 } La_mips_64_regs; 53 54 /* Return values for calls from PLT on MIPS. */ 55 typedef struct La_mips_64_retval 56 { 57 uint64_t lrv_v0; 58 uint64_t lrv_v1; 59 double lrv_f0; 60 double lrv_f2; 61 } La_mips_64_retval; 62 63 #endif 64 65 __BEGIN_DECLS 66 67 #if _MIPS_SIM == _ABIO32 68 69 extern Elf32_Addr la_mips_o32_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, 70 uintptr_t *__refcook, 71 uintptr_t *__defcook, 72 La_mips_32_regs *__regs, 73 unsigned int *__flags, 74 const char *__symname, 75 long int *__framesizep); 76 extern unsigned int la_mips_o32_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, 77 uintptr_t *__refcook, 78 uintptr_t *__defcook, 79 const La_mips_32_regs *__inregs, 80 La_mips_32_retval *__outregs, 81 const char *__symname); 82 83 #elif _MIPS_SIM == _ABIN32 84 85 extern Elf32_Addr la_mips_n32_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, 86 uintptr_t *__refcook, 87 uintptr_t *__defcook, 88 La_mips_64_regs *__regs, 89 unsigned int *__flags, 90 const char *__symname, 91 long int *__framesizep); 92 extern unsigned int la_mips_n32_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, 93 uintptr_t *__refcook, 94 uintptr_t *__defcook, 95 const La_mips_64_regs *__inregs, 96 La_mips_64_retval *__outregs, 97 const char *__symname); 98 99 #else 100 101 extern Elf64_Addr la_mips_n64_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx, 102 uintptr_t *__refcook, 103 uintptr_t *__defcook, 104 La_mips_64_regs *__regs, 105 unsigned int *__flags, 106 const char *__symname, 107 long int *__framesizep); 108 extern unsigned int la_mips_n64_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx, 109 uintptr_t *__refcook, 110 uintptr_t *__defcook, 111 const La_mips_64_regs *__inregs, 112 La_mips_64_retval *__outregs, 113 const char *__symname); 114 115 #endif 116 117 __END_DECLS 118