1 /* Copyright (C) 2004, 2005 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, write to the Free 16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17 02111-1307 USA. */ 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 /* Registers for entry into PLT on IA-32. */ 26 typedef struct La_i86_regs 27 { 28 uint32_t lr_edx; 29 uint32_t lr_ecx; 30 uint32_t lr_eax; 31 uint32_t lr_ebp; 32 uint32_t lr_esp; 33 } La_i86_regs; 34 35 /* Return values for calls from PLT on IA-32. */ 36 typedef struct La_i86_retval 37 { 38 uint32_t lrv_eax; 39 uint32_t lrv_edx; 40 long double lrv_st0; 41 long double lrv_st1; 42 } La_i86_retval; 43 44 45 __BEGIN_DECLS 46 47 extern Elf32_Addr la_i86_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, 48 uintptr_t *__refcook, 49 uintptr_t *__defcook, 50 La_i86_regs *__regs, 51 unsigned int *__flags, 52 const char *__symname, 53 long int *__framesizep); 54 extern unsigned int la_i86_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, 55 uintptr_t *__refcook, 56 uintptr_t *__defcook, 57 const La_i86_regs *__inregs, 58 La_i86_retval *__outregs, 59 const char *symname); 60 61 __END_DECLS 62 63 #else 64 65 /* Registers for entry into PLT on x86-64. */ 66 # if __GNUC_PREREQ (4,0) 67 typedef float La_x86_64_xmm __attribute__ ((__vector_size__ (16))); 68 # else 69 typedef float La_x86_64_xmm __attribute__ ((__mode__ (__V4SF__))); 70 # endif 71 72 typedef struct La_x86_64_regs 73 { 74 uint64_t lr_rdx; 75 uint64_t lr_r8; 76 uint64_t lr_r9; 77 uint64_t lr_rcx; 78 uint64_t lr_rsi; 79 uint64_t lr_rdi; 80 uint64_t lr_rbp; 81 uint64_t lr_rsp; 82 La_x86_64_xmm lr_xmm[8]; 83 } La_x86_64_regs; 84 85 /* Return values for calls from PLT on x86-64. */ 86 typedef struct La_x86_64_retval 87 { 88 uint64_t lrv_rax; 89 uint64_t lrv_rdx; 90 La_x86_64_xmm lrv_xmm0; 91 La_x86_64_xmm lrv_xmm1; 92 long double lrv_st0; 93 long double lrv_st1; 94 } La_x86_64_retval; 95 96 97 __BEGIN_DECLS 98 99 extern Elf64_Addr la_x86_64_gnu_pltenter (Elf64_Sym *__sym, 100 unsigned int __ndx, 101 uintptr_t *__refcook, 102 uintptr_t *__defcook, 103 La_x86_64_regs *__regs, 104 unsigned int *__flags, 105 const char *__symname, 106 long int *__framesizep); 107 extern unsigned int la_x86_64_gnu_pltexit (Elf64_Sym *__sym, 108 unsigned int __ndx, 109 uintptr_t *__refcook, 110 uintptr_t *__defcook, 111 const La_x86_64_regs *__inregs, 112 La_x86_64_retval *__outregs, 113 const char *symname); 114 115 __END_DECLS 116 117 #endif 118