1 /* Machine-specific declarations for dynamic linker interface. PowerPC version 2 Copyright (C) 2004-2021 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 7 License as published by the Free Software Foundation; either 8 version 2.1 of the 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 #ifndef _LINK_H 20 # error "Never include <bits/link.h> directly; use <link.h> instead." 21 #endif 22 23 24 #if __ELF_NATIVE_CLASS == 32 25 26 /* Registers for entry into PLT on PPC32. */ 27 typedef struct La_ppc32_regs 28 { 29 uint32_t lr_reg[8]; 30 double lr_fp[8]; 31 uint32_t lr_vreg[12][4]; 32 uint32_t lr_r1; 33 uint32_t lr_lr; 34 } La_ppc32_regs; 35 36 /* Return values for calls from PLT on PPC32. */ 37 typedef struct La_ppc32_retval 38 { 39 uint32_t lrv_r3; 40 uint32_t lrv_r4; 41 double lrv_fp[8]; 42 uint32_t lrv_v2[4]; 43 } La_ppc32_retval; 44 45 46 __BEGIN_DECLS 47 48 extern Elf32_Addr la_ppc32_gnu_pltenter (Elf32_Sym *__sym, 49 unsigned int __ndx, 50 uintptr_t *__refcook, 51 uintptr_t *__defcook, 52 La_ppc32_regs *__regs, 53 unsigned int *__flags, 54 const char *__symname, 55 long int *__framesizep); 56 extern unsigned int la_ppc32_gnu_pltexit (Elf32_Sym *__sym, 57 unsigned int __ndx, 58 uintptr_t *__refcook, 59 uintptr_t *__defcook, 60 const La_ppc32_regs *__inregs, 61 La_ppc32_retval *__outregs, 62 const char *__symname); 63 64 __END_DECLS 65 66 #elif __ELF_NATIVE_CLASS == 64 67 # if _CALL_ELF != 2 68 69 /* Registers for entry into PLT on PPC64. */ 70 typedef struct La_ppc64_regs 71 { 72 uint64_t lr_reg[8]; 73 double lr_fp[13]; 74 uint32_t __padding; 75 uint32_t lr_vrsave; 76 uint32_t lr_vreg[12][4]; 77 uint64_t lr_r1; 78 uint64_t lr_lr; 79 } La_ppc64_regs; 80 81 /* Return values for calls from PLT on PPC64. */ 82 typedef struct La_ppc64_retval 83 { 84 uint64_t lrv_r3; 85 uint64_t lrv_r4; 86 double lrv_fp[4]; /* f1-f4, float - complex long double. */ 87 uint32_t lrv_v2[4]; /* v2. */ 88 } La_ppc64_retval; 89 90 91 __BEGIN_DECLS 92 93 extern Elf64_Addr la_ppc64_gnu_pltenter (Elf64_Sym *__sym, 94 unsigned int __ndx, 95 uintptr_t *__refcook, 96 uintptr_t *__defcook, 97 La_ppc64_regs *__regs, 98 unsigned int *__flags, 99 const char *__symname, 100 long int *__framesizep); 101 extern unsigned int la_ppc64_gnu_pltexit (Elf64_Sym *__sym, 102 unsigned int __ndx, 103 uintptr_t *__refcook, 104 uintptr_t *__defcook, 105 const La_ppc64_regs *__inregs, 106 La_ppc64_retval *__outregs, 107 const char *__symname); 108 109 __END_DECLS 110 111 # else 112 113 /* Registers for entry into PLT on PPC64 in the ELFv2 ABI. */ 114 typedef struct La_ppc64v2_regs 115 { 116 uint64_t lr_reg[8]; 117 double lr_fp[13]; 118 uint32_t __padding; 119 uint32_t lr_vrsave; 120 uint32_t lr_vreg[12][4] __attribute__ ((aligned (16))); 121 uint64_t lr_r1; 122 uint64_t lr_lr; 123 } La_ppc64v2_regs; 124 125 /* Return values for calls from PLT on PPC64 in the ELFv2 ABI. */ 126 typedef struct La_ppc64v2_retval 127 { 128 uint64_t lrv_r3; 129 uint64_t lrv_r4; 130 double lrv_fp[10]; 131 uint32_t lrv_vreg[8][4] __attribute__ ((aligned (16))); 132 } La_ppc64v2_retval; 133 134 135 __BEGIN_DECLS 136 137 extern Elf64_Addr la_ppc64v2_gnu_pltenter (Elf64_Sym *__sym, 138 unsigned int __ndx, 139 uintptr_t *__refcook, 140 uintptr_t *__defcook, 141 La_ppc64v2_regs *__regs, 142 unsigned int *__flags, 143 const char *__symname, 144 long int *__framesizep); 145 extern unsigned int la_ppc64v2_gnu_pltexit (Elf64_Sym *__sym, 146 unsigned int __ndx, 147 uintptr_t *__refcook, 148 uintptr_t *__defcook, 149 const La_ppc64v2_regs *__inregs, 150 La_ppc64v2_retval *__outregs, 151 const char *__symname); 152 153 __END_DECLS 154 155 # endif 156 #endif 157