1 /* Copyright (C) 2005-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 #ifndef _LINK_H 19 # error "Never include <bits/link.h> directly; use <link.h> instead." 20 #endif 21 22 #if defined HAVE_S390_VX_ASM_SUPPORT 23 typedef char La_s390_vr[16]; 24 #endif 25 26 #if __ELF_NATIVE_CLASS == 32 27 28 /* Registers for entry into PLT on s390-32. */ 29 typedef struct La_s390_32_regs 30 { 31 uint32_t lr_r2; 32 uint32_t lr_r3; 33 uint32_t lr_r4; 34 uint32_t lr_r5; 35 uint32_t lr_r6; 36 double lr_fp0; 37 double lr_fp2; 38 # if defined HAVE_S390_VX_ASM_SUPPORT 39 La_s390_vr lr_v24; 40 La_s390_vr lr_v25; 41 La_s390_vr lr_v26; 42 La_s390_vr lr_v27; 43 La_s390_vr lr_v28; 44 La_s390_vr lr_v29; 45 La_s390_vr lr_v30; 46 La_s390_vr lr_v31; 47 # endif 48 } La_s390_32_regs; 49 50 /* Return values for calls from PLT on s390-32. */ 51 typedef struct La_s390_32_retval 52 { 53 uint32_t lrv_r2; 54 uint32_t lrv_r3; 55 double lrv_fp0; 56 # if defined HAVE_S390_VX_ASM_SUPPORT 57 La_s390_vr lrv_v24; 58 # endif 59 } La_s390_32_retval; 60 61 62 __BEGIN_DECLS 63 64 extern Elf32_Addr la_s390_32_gnu_pltenter (Elf32_Sym *__sym, 65 unsigned int __ndx, 66 uintptr_t *__refcook, 67 uintptr_t *__defcook, 68 La_s390_32_regs *__regs, 69 unsigned int *__flags, 70 const char *__symname, 71 long int *__framesizep); 72 extern unsigned int la_s390_32_gnu_pltexit (Elf32_Sym *__sym, 73 unsigned int __ndx, 74 uintptr_t *__refcook, 75 uintptr_t *__defcook, 76 const La_s390_32_regs *__inregs, 77 La_s390_32_retval *__outregs, 78 const char *symname); 79 80 __END_DECLS 81 82 #else 83 84 /* Registers for entry into PLT on s390-64. */ 85 typedef struct La_s390_64_regs 86 { 87 uint64_t lr_r2; 88 uint64_t lr_r3; 89 uint64_t lr_r4; 90 uint64_t lr_r5; 91 uint64_t lr_r6; 92 double lr_fp0; 93 double lr_fp2; 94 double lr_fp4; 95 double lr_fp6; 96 # if defined HAVE_S390_VX_ASM_SUPPORT 97 La_s390_vr lr_v24; 98 La_s390_vr lr_v25; 99 La_s390_vr lr_v26; 100 La_s390_vr lr_v27; 101 La_s390_vr lr_v28; 102 La_s390_vr lr_v29; 103 La_s390_vr lr_v30; 104 La_s390_vr lr_v31; 105 # endif 106 } La_s390_64_regs; 107 108 /* Return values for calls from PLT on s390-64. */ 109 typedef struct La_s390_64_retval 110 { 111 uint64_t lrv_r2; 112 double lrv_fp0; 113 # if defined HAVE_S390_VX_ASM_SUPPORT 114 La_s390_vr lrv_v24; 115 # endif 116 } La_s390_64_retval; 117 118 119 __BEGIN_DECLS 120 121 extern Elf64_Addr la_s390_64_gnu_pltenter (Elf64_Sym *__sym, 122 unsigned int __ndx, 123 uintptr_t *__refcook, 124 uintptr_t *__defcook, 125 La_s390_64_regs *__regs, 126 unsigned int *__flags, 127 const char *__symname, 128 long int *__framesizep); 129 extern unsigned int la_s390_64_gnu_pltexit (Elf64_Sym *__sym, 130 unsigned int __ndx, 131 uintptr_t *__refcook, 132 uintptr_t *__defcook, 133 const La_s390_64_regs *__inregs, 134 La_s390_64_retval *__outregs, 135 const char *__symname); 136 137 __END_DECLS 138 139 #endif 140