1 /* Run-time dynamic linker data structures for loaded ELF shared objects.
2    X86 version.
3    Copyright (C) 1995-2022 Free Software Foundation, Inc.
4    This file is part of the GNU C Library.
5 
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10 
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15 
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, see
18    <https://www.gnu.org/licenses/>.  */
19 
20 #ifndef	_X86_LDSODEFS_H
21 #define	_X86_LDSODEFS_H	1
22 
23 #include <elf.h>
24 #include <cpu-features.h>
25 
26 struct La_i86_regs;
27 struct La_i86_retval;
28 struct La_x86_64_regs;
29 struct La_x86_64_retval;
30 struct La_x32_regs;
31 struct La_x32_retval;
32 
33 #define ARCH_PLTENTER_MEMBERS						\
34     Elf32_Addr (*i86_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \
35 				    uintptr_t *, struct La_i86_regs *,	\
36 				    unsigned int *, const char *name,	\
37 				    long int *framesizep);		\
38     Elf64_Addr (*x86_64_gnu_pltenter) (Elf64_Sym *, unsigned int,	\
39 				       uintptr_t *,			\
40 				       uintptr_t *, struct La_x86_64_regs *, \
41 				       unsigned int *, const char *name, \
42 				       long int *framesizep);		\
43     Elf32_Addr (*x32_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \
44 				    uintptr_t *, struct La_x32_regs *,	\
45 				    unsigned int *, const char *name,	\
46 				    long int *framesizep)
47 
48 #define ARCH_PLTEXIT_MEMBERS						\
49     unsigned int (*i86_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \
50 				     uintptr_t *, const struct La_i86_regs *, \
51 				     struct La_i86_retval *, const char *); \
52     unsigned int (*x86_64_gnu_pltexit) (Elf64_Sym *, unsigned int,	\
53 					uintptr_t *,			\
54 					uintptr_t *,			\
55 					const struct La_x86_64_regs *,	\
56 					struct La_x86_64_retval *,	\
57 					const char *);			\
58     unsigned int (*x32_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \
59 				     uintptr_t *,			\
60 				     const struct La_x32_regs *,	\
61 				     struct La_x86_64_retval *,		\
62 				     const char *)
63 
64 #include <cet-control.h>
65 #include_next <ldsodefs.h>
66 
67 #endif
68