1 : /* This file defines standard ELF types, structures, and macros.
2 : Copyright (C) 1995-2003,2004,2005,2006 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, write to the Free
17 : Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18 : 02111-1307 USA. */
19 :
20 : #ifndef _ELF_H
21 : #define _ELF_H 1
22 :
23 : #include <features.h>
24 :
25 : __BEGIN_DECLS
26 :
27 : /* Standard ELF types. */
28 :
29 : #include <stdint.h>
30 :
31 : /* Type for a 16-bit quantity. */
32 : typedef uint16_t Elf32_Half;
33 : typedef uint16_t Elf64_Half;
34 :
35 : /* Types for signed and unsigned 32-bit quantities. */
36 : typedef uint32_t Elf32_Word;
37 : typedef int32_t Elf32_Sword;
38 : typedef uint32_t Elf64_Word;
39 : typedef int32_t Elf64_Sword;
40 :
41 : /* Types for signed and unsigned 64-bit quantities. */
42 : typedef uint64_t Elf32_Xword;
43 : typedef int64_t Elf32_Sxword;
44 : typedef uint64_t Elf64_Xword;
45 : typedef int64_t Elf64_Sxword;
46 :
47 : /* Type of addresses. */
48 : typedef uint32_t Elf32_Addr;
49 : typedef uint64_t Elf64_Addr;
50 :
51 : /* Type of file offsets. */
52 : typedef uint32_t Elf32_Off;
53 : typedef uint64_t Elf64_Off;
54 :
55 : /* Type for section indices, which are 16-bit quantities. */
56 : typedef uint16_t Elf32_Section;
57 : typedef uint16_t Elf64_Section;
58 :
59 : /* Type for version symbol information. */
60 : typedef Elf32_Half Elf32_Versym;
61 : typedef Elf64_Half Elf64_Versym;
62 :
63 :
64 : /* The ELF file header. This appears at the start of every ELF file. */
65 :
66 : #define EI_NIDENT (16)
67 :
68 : typedef struct
69 : {
70 : unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
71 : Elf32_Half e_type; /* Object file type */
72 : Elf32_Half e_machine; /* Architecture */
73 : Elf32_Word e_version; /* Object file version */
74 : Elf32_Addr e_entry; /* Entry point virtual address */
75 : Elf32_Off e_phoff; /* Program header table file offset */
76 : Elf32_Off e_shoff; /* Section header table file offset */
77 : Elf32_Word e_flags; /* Processor-specific flags */
78 : Elf32_Half e_ehsize; /* ELF header size in bytes */
79 : Elf32_Half e_phentsize; /* Program header table entry size */
80 : Elf32_Half e_phnum; /* Program header table entry count */
81 : Elf32_Half e_shentsize; /* Section header table entry size */
82 : Elf32_Half e_shnum; /* Section header table entry count */
83 : Elf32_Half e_shstrndx; /* Section header string table index */
84 42 : } Elf32_Ehdr;
85 :
86 : typedef struct
87 : {
88 : unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
89 : Elf64_Half e_type; /* Object file type */
90 : Elf64_Half e_machine; /* Architecture */
91 : Elf64_Word e_version; /* Object file version */
92 : Elf64_Addr e_entry; /* Entry point virtual address */
93 : Elf64_Off e_phoff; /* Program header table file offset */
94 : Elf64_Off e_shoff; /* Section header table file offset */
95 : Elf64_Word e_flags; /* Processor-specific flags */
96 : Elf64_Half e_ehsize; /* ELF header size in bytes */
97 : Elf64_Half e_phentsize; /* Program header table entry size */
98 : Elf64_Half e_phnum; /* Program header table entry count */
99 : Elf64_Half e_shentsize; /* Section header table entry size */
100 : Elf64_Half e_shnum; /* Section header table entry count */
101 : Elf64_Half e_shstrndx; /* Section header string table index */
102 : } Elf64_Ehdr;
103 :
104 : /* Fields in the e_ident array. The EI_* macros are indices into the
105 : array. The macros under each EI_* macro are the values the byte
106 : may have. */
107 :
108 : #define EI_MAG0 0 /* File identification byte 0 index */
109 : #define ELFMAG0 0x7f /* Magic number byte 0 */
110 :
111 : #define EI_MAG1 1 /* File identification byte 1 index */
112 : #define ELFMAG1 'E' /* Magic number byte 1 */
113 :
114 : #define EI_MAG2 2 /* File identification byte 2 index */
115 : #define ELFMAG2 'L' /* Magic number byte 2 */
116 :
117 : #define EI_MAG3 3 /* File identification byte 3 index */
118 : #define ELFMAG3 'F' /* Magic number byte 3 */
119 :
120 : /* Conglomeration of the identification bytes, for easy testing as a word. */
121 : #define ELFMAG "\177ELF"
122 : #define SELFMAG 4
123 :
124 : #define EI_CLASS 4 /* File class byte index */
125 : #define ELFCLASSNONE 0 /* Invalid class */
126 : #define ELFCLASS32 1 /* 32-bit objects */
127 : #define ELFCLASS64 2 /* 64-bit objects */
128 : #define ELFCLASSNUM 3
129 :
130 : #define EI_DATA 5 /* Data encoding byte index */
131 : #define ELFDATANONE 0 /* Invalid data encoding */
132 : #define ELFDATA2LSB 1 /* 2's complement, little endian */
133 : #define ELFDATA2MSB 2 /* 2's complement, big endian */
134 : #define ELFDATANUM 3
135 :
136 : #define EI_VERSION 6 /* File version byte index */
137 : /* Value must be EV_CURRENT */
138 :
139 : #define EI_OSABI 7 /* OS ABI identification */
140 : #define ELFOSABI_NONE 0 /* UNIX System V ABI */
141 : #define ELFOSABI_SYSV 0 /* Alias. */
142 : #define ELFOSABI_HPUX 1 /* HP-UX */
143 : #define ELFOSABI_NETBSD 2 /* NetBSD. */
144 : #define ELFOSABI_LINUX 3 /* Linux. */
145 : #define ELFOSABI_SOLARIS 6 /* Sun Solaris. */
146 : #define ELFOSABI_AIX 7 /* IBM AIX. */
147 : #define ELFOSABI_IRIX 8 /* SGI Irix. */
148 : #define ELFOSABI_FREEBSD 9 /* FreeBSD. */
149 : #define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX. */
150 : #define ELFOSABI_MODESTO 11 /* Novell Modesto. */
151 : #define ELFOSABI_OPENBSD 12 /* OpenBSD. */
152 : #define ELFOSABI_ARM 97 /* ARM */
153 : #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
154 :
155 : #define EI_ABIVERSION 8 /* ABI version */
156 :
157 : #define EI_PAD 9 /* Byte index of padding bytes */
158 :
159 : /* Legal values for e_type (object file type). */
160 :
161 : #define ET_NONE 0 /* No file type */
162 : #define ET_REL 1 /* Relocatable file */
163 : #define ET_EXEC 2 /* Executable file */
164 : #define ET_DYN 3 /* Shared object file */
165 : #define ET_CORE 4 /* Core file */
166 : #define ET_NUM 5 /* Number of defined types */
167 : #define ET_LOOS 0xfe00 /* OS-specific range start */
168 : #define ET_HIOS 0xfeff /* OS-specific range end */
169 : #define ET_LOPROC 0xff00 /* Processor-specific range start */
170 : #define ET_HIPROC 0xffff /* Processor-specific range end */
171 :
172 : /* Legal values for e_machine (architecture). */
173 :
174 : #define EM_NONE 0 /* No machine */
175 : #define EM_M32 1 /* AT&T WE 32100 */
176 : #define EM_SPARC 2 /* SUN SPARC */
177 : #define EM_386 3 /* Intel 80386 */
178 : #define EM_68K 4 /* Motorola m68k family */
179 : #define EM_88K 5 /* Motorola m88k family */
180 : #define EM_860 7 /* Intel 80860 */
181 : #define EM_MIPS 8 /* MIPS R3000 big-endian */
182 : #define EM_S370 9 /* IBM System/370 */
183 : #define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */
184 :
185 : #define EM_PARISC 15 /* HPPA */
186 : #define EM_VPP500 17 /* Fujitsu VPP500 */
187 : #define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
188 : #define EM_960 19 /* Intel 80960 */
189 : #define EM_PPC 20 /* PowerPC */
190 : #define EM_PPC64 21 /* PowerPC 64-bit */
191 : #define EM_S390 22 /* IBM S390 */
192 :
193 : #define EM_V800 36 /* NEC V800 series */
194 : #define EM_FR20 37 /* Fujitsu FR20 */
195 : #define EM_RH32 38 /* TRW RH-32 */
196 : #define EM_RCE 39 /* Motorola RCE */
197 : #define EM_ARM 40 /* ARM */
198 : #define EM_FAKE_ALPHA 41 /* Digital Alpha */
199 : #define EM_SH 42 /* Hitachi SH */
200 : #define EM_SPARCV9 43 /* SPARC v9 64-bit */
201 : #define EM_TRICORE 44 /* Siemens Tricore */
202 : #define EM_ARC 45 /* Argonaut RISC Core */
203 : #define EM_H8_300 46 /* Hitachi H8/300 */
204 : #define EM_H8_300H 47 /* Hitachi H8/300H */
205 : #define EM_H8S 48 /* Hitachi H8S */
206 : #define EM_H8_500 49 /* Hitachi H8/500 */
207 : #define EM_IA_64 50 /* Intel Merced */
208 : #define EM_MIPS_X 51 /* Stanford MIPS-X */
209 : #define EM_COLDFIRE 52 /* Motorola Coldfire */
210 : #define EM_68HC12 53 /* Motorola M68HC12 */
211 : #define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/
212 : #define EM_PCP 55 /* Siemens PCP */
213 : #define EM_NCPU 56 /* Sony nCPU embeeded RISC */
214 : #define EM_NDR1 57 /* Denso NDR1 microprocessor */
215 : #define EM_STARCORE 58 /* Motorola Start*Core processor */
216 : #define EM_ME16 59 /* Toyota ME16 processor */
217 : #define EM_ST100 60 /* STMicroelectronic ST100 processor */
218 : #define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/
219 : #define EM_X86_64 62 /* AMD x86-64 architecture */
220 : #define EM_PDSP 63 /* Sony DSP Processor */
221 :
222 : #define EM_FX66 66 /* Siemens FX66 microcontroller */
223 : #define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */
224 : #define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */
225 : #define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */
226 : #define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */
227 : #define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */
228 : #define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */
229 : #define EM_SVX 73 /* Silicon Graphics SVx */
230 : #define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */
231 : #define EM_VAX 75 /* Digital VAX */
232 : #define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */
233 : #define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded processor */
234 : #define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */
235 : #define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */
236 : #define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */
237 : #define EM_HUANY 81 /* Harvard University machine-independent object files */
238 : #define EM_PRISM 82 /* SiTera Prism */
239 : #define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */
240 : #define EM_FR30 84 /* Fujitsu FR30 */
241 : #define EM_D10V 85 /* Mitsubishi D10V */
242 : #define EM_D30V 86 /* Mitsubishi D30V */
243 : #define EM_V850 87 /* NEC v850 */
244 : #define EM_M32R 88 /* Mitsubishi M32R */
245 : #define EM_MN10300 89 /* Matsushita MN10300 */
246 : #define EM_MN10200 90 /* Matsushita MN10200 */
247 : #define EM_PJ 91 /* picoJava */
248 : #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
249 : #define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
250 : #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
251 : #define EM_NUM 95
252 :
253 : /* If it is necessary to assign new unofficial EM_* values, please
254 : pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
255 : chances of collision with official or non-GNU unofficial values. */
256 :
257 : #define EM_ALPHA 0x9026
258 :
259 : /* Legal values for e_version (version). */
260 :
261 : #define EV_NONE 0 /* Invalid ELF version */
262 : #define EV_CURRENT 1 /* Current version */
263 : #define EV_NUM 2
264 :
265 : /* Section header. */
266 :
267 : typedef struct
268 : {
269 : Elf32_Word sh_name; /* Section name (string tbl index) */
270 : Elf32_Word sh_type; /* Section type */
271 : Elf32_Word sh_flags; /* Section flags */
272 : Elf32_Addr sh_addr; /* Section virtual addr at execution */
273 : Elf32_Off sh_offset; /* Section file offset */
274 : Elf32_Word sh_size; /* Section size in bytes */
275 : Elf32_Word sh_link; /* Link to another section */
276 : Elf32_Word sh_info; /* Additional section information */
277 : Elf32_Word sh_addralign; /* Section alignment */
278 : Elf32_Word sh_entsize; /* Entry size if section holds table */
279 1070 : } Elf32_Shdr;
280 :
281 : typedef struct
282 : {
283 : Elf64_Word sh_name; /* Section name (string tbl index) */
284 : Elf64_Word sh_type; /* Section type */
285 : Elf64_Xword sh_flags; /* Section flags */
286 : Elf64_Addr sh_addr; /* Section virtual addr at execution */
287 : Elf64_Off sh_offset; /* Section file offset */
288 : Elf64_Xword sh_size; /* Section size in bytes */
289 : Elf64_Word sh_link; /* Link to another section */
290 : Elf64_Word sh_info; /* Additional section information */
291 : Elf64_Xword sh_addralign; /* Section alignment */
292 : Elf64_Xword sh_entsize; /* Entry size if section holds table */
293 : } Elf64_Shdr;
294 :
295 : /* Special section indices. */
296 :
297 : #define SHN_UNDEF 0 /* Undefined section */
298 : #define SHN_LORESERVE 0xff00 /* Start of reserved indices */
299 : #define SHN_LOPROC 0xff00 /* Start of processor-specific */
300 : #define SHN_BEFORE 0xff00 /* Order section before all others
301 : (Solaris). */
302 : #define SHN_AFTER 0xff01 /* Order section after all others
303 : (Solaris). */
304 : #define SHN_HIPROC 0xff1f /* End of processor-specific */
305 : #define SHN_LOOS 0xff20 /* Start of OS-specific */
306 : #define SHN_HIOS 0xff3f /* End of OS-specific */
307 : #define SHN_ABS 0xfff1 /* Associated symbol is absolute */
308 : #define SHN_COMMON 0xfff2 /* Associated symbol is common */
309 : #define SHN_XINDEX 0xffff /* Index is in extra table. */
310 : #define SHN_HIRESERVE 0xffff /* End of reserved indices */
311 :
312 : /* Legal values for sh_type (section type). */
313 :
314 : #define SHT_NULL 0 /* Section header table entry unused */
315 : #define SHT_PROGBITS 1 /* Program data */
316 : #define SHT_SYMTAB 2 /* Symbol table */
317 : #define SHT_STRTAB 3 /* String table */
318 : #define SHT_RELA 4 /* Relocation entries with addends */
319 : #define SHT_HASH 5 /* Symbol hash table */
320 : #define SHT_DYNAMIC 6 /* Dynamic linking information */
321 : #define SHT_NOTE 7 /* Notes */
322 : #define SHT_NOBITS 8 /* Program space with no data (bss) */
323 : #define SHT_REL 9 /* Relocation entries, no addends */
324 : #define SHT_SHLIB 10 /* Reserved */
325 : #define SHT_DYNSYM 11 /* Dynamic linker symbol table */
326 : #define SHT_INIT_ARRAY 14 /* Array of constructors */
327 : #define SHT_FINI_ARRAY 15 /* Array of destructors */
328 : #define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */
329 : #define SHT_GROUP 17 /* Section group */
330 : #define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */
331 : #define SHT_NUM 19 /* Number of defined types. */
332 : #define SHT_LOOS 0x60000000 /* Start OS-specific. */
333 : #define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */
334 : #define SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */
335 : #define SHT_CHECKSUM 0x6ffffff8 /* Checksum for DSO content. */
336 : #define SHT_LOSUNW 0x6ffffffa /* Sun-specific low bound. */
337 : #define SHT_SUNW_move 0x6ffffffa
338 : #define SHT_SUNW_COMDAT 0x6ffffffb
339 : #define SHT_SUNW_syminfo 0x6ffffffc
340 : #define SHT_GNU_verdef 0x6ffffffd /* Version definition section. */
341 : #define SHT_GNU_verneed 0x6ffffffe /* Version needs section. */
342 : #define SHT_GNU_versym 0x6fffffff /* Version symbol table. */
343 : #define SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */
344 : #define SHT_HIOS 0x6fffffff /* End OS-specific type */
345 : #define SHT_LOPROC 0x70000000 /* Start of processor-specific */
346 : #define SHT_HIPROC 0x7fffffff /* End of processor-specific */
347 : #define SHT_LOUSER 0x80000000 /* Start of application-specific */
348 : #define SHT_HIUSER 0x8fffffff /* End of application-specific */
349 :
350 : /* Legal values for sh_flags (section flags). */
351 :
352 : #define SHF_WRITE (1 << 0) /* Writable */
353 : #define SHF_ALLOC (1 << 1) /* Occupies memory during execution */
354 : #define SHF_EXECINSTR (1 << 2) /* Executable */
355 : #define SHF_MERGE (1 << 4) /* Might be merged */
356 : #define SHF_STRINGS (1 << 5) /* Contains nul-terminated strings */
357 : #define SHF_INFO_LINK (1 << 6) /* `sh_info' contains SHT index */
358 : #define SHF_LINK_ORDER (1 << 7) /* Preserve order after combining */
359 : #define SHF_OS_NONCONFORMING (1 << 8) /* Non-standard OS specific handling
360 : required */
361 : #define SHF_GROUP (1 << 9) /* Section is member of a group. */
362 : #define SHF_TLS (1 << 10) /* Section hold thread-local data. */
363 : #define SHF_MASKOS 0x0ff00000 /* OS-specific. */
364 : #define SHF_MASKPROC 0xf0000000 /* Processor-specific */
365 : #define SHF_ORDERED (1 << 30) /* Special ordering requirement
366 : (Solaris). */
367 : #define SHF_EXCLUDE (1 << 31) /* Section is excluded unless
368 : referenced or allocated (Solaris).*/
369 :
370 : /* Section group handling. */
371 : #define GRP_COMDAT 0x1 /* Mark group as COMDAT. */
372 :
373 : /* Symbol table entry. */
374 :
375 : typedef struct
376 : {
377 : Elf32_Word st_name; /* Symbol name (string tbl index) */
378 : Elf32_Addr st_value; /* Symbol value */
379 : Elf32_Word st_size; /* Symbol size */
380 : unsigned char st_info; /* Symbol type and binding */
381 : unsigned char st_other; /* Symbol visibility */
382 : Elf32_Section st_shndx; /* Section index */
383 787943 : } Elf32_Sym;
384 :
385 : typedef struct
386 : {
387 : Elf64_Word st_name; /* Symbol name (string tbl index) */
388 : unsigned char st_info; /* Symbol type and binding */
389 : unsigned char st_other; /* Symbol visibility */
390 : Elf64_Section st_shndx; /* Section index */
391 : Elf64_Addr st_value; /* Symbol value */
392 : Elf64_Xword st_size; /* Symbol size */
393 : } Elf64_Sym;
394 :
395 : /* The syminfo section if available contains additional information about
396 : every dynamic symbol. */
397 :
398 : typedef struct
399 : {
400 : Elf32_Half si_boundto; /* Direct bindings, symbol bound to */
401 : Elf32_Half si_flags; /* Per symbol flags */
402 : } Elf32_Syminfo;
403 :
404 : typedef struct
405 : {
406 : Elf64_Half si_boundto; /* Direct bindings, symbol bound to */
407 : Elf64_Half si_flags; /* Per symbol flags */
408 : } Elf64_Syminfo;
409 :
410 : /* Possible values for si_boundto. */
411 : #define SYMINFO_BT_SELF 0xffff /* Symbol bound to self */
412 : #define SYMINFO_BT_PARENT 0xfffe /* Symbol bound to parent */
413 : #define SYMINFO_BT_LOWRESERVE 0xff00 /* Beginning of reserved entries */
414 :
415 : /* Possible bitmasks for si_flags. */
416 : #define SYMINFO_FLG_DIRECT 0x0001 /* Direct bound symbol */
417 : #define SYMINFO_FLG_PASSTHRU 0x0002 /* Pass-thru symbol for translator */
418 : #define SYMINFO_FLG_COPY 0x0004 /* Symbol is a copy-reloc */
419 : #define SYMINFO_FLG_LAZYLOAD 0x0008 /* Symbol bound to object to be lazy
420 : loaded */
421 : /* Syminfo version values. */
422 : #define SYMINFO_NONE 0
423 : #define SYMINFO_CURRENT 1
424 : #define SYMINFO_NUM 2
425 :
426 :
427 : /* How to extract and insert information held in the st_info field. */
428 :
429 : #define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4)
430 : #define ELF32_ST_TYPE(val) ((val) & 0xf)
431 : #define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
432 :
433 : /* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */
434 : #define ELF64_ST_BIND(val) ELF32_ST_BIND (val)
435 : #define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
436 : #define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type))
437 :
438 : /* Legal values for ST_BIND subfield of st_info (symbol binding). */
439 :
440 : #define STB_LOCAL 0 /* Local symbol */
441 : #define STB_GLOBAL 1 /* Global symbol */
442 : #define STB_WEAK 2 /* Weak symbol */
443 : #define STB_NUM 3 /* Number of defined types. */
444 : #define STB_LOOS 10 /* Start of OS-specific */
445 : #define STB_HIOS 12 /* End of OS-specific */
446 : #define STB_LOPROC 13 /* Start of processor-specific */
447 : #define STB_HIPROC 15 /* End of processor-specific */
448 :
449 : /* Legal values for ST_TYPE subfield of st_info (symbol type). */
450 :
451 : #define STT_NOTYPE 0 /* Symbol type is unspecified */
452 : #define STT_OBJECT 1 /* Symbol is a data object */
453 : #define STT_FUNC 2 /* Symbol is a code object */
454 : #define STT_SECTION 3 /* Symbol associated with a section */
455 : #define STT_FILE 4 /* Symbol's name is file name */
456 : #define STT_COMMON 5 /* Symbol is a common data object */
457 : #define STT_TLS 6 /* Symbol is thread-local data object*/
458 : #define STT_NUM 7 /* Number of defined types. */
459 : #define STT_LOOS 10 /* Start of OS-specific */
460 : #define STT_HIOS 12 /* End of OS-specific */
461 : #define STT_LOPROC 13 /* Start of processor-specific */
462 : #define STT_HIPROC 15 /* End of processor-specific */
463 :
464 :
465 : /* Symbol table indices are found in the hash buckets and chain table
466 : of a symbol hash table section. This special index value indicates
467 : the end of a chain, meaning no further symbols are found in that bucket. */
468 :
469 : #define STN_UNDEF 0 /* End of a chain. */
470 :
471 :
472 : /* How to extract and insert information held in the st_other field. */
473 :
474 : #define ELF32_ST_VISIBILITY(o) ((o) & 0x03)
475 :
476 : /* For ELF64 the definitions are the same. */
477 : #define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o)
478 :
479 : /* Symbol visibility specification encoded in the st_other field. */
480 : #define STV_DEFAULT 0 /* Default symbol visibility rules */
481 : #define STV_INTERNAL 1 /* Processor specific hidden class */
482 : #define STV_HIDDEN 2 /* Sym unavailable in other modules */
483 : #define STV_PROTECTED 3 /* Not preemptible, not exported */
484 :
485 :
486 : /* Relocation table entry without addend (in section of type SHT_REL). */
487 :
488 : typedef struct
489 : {
490 : Elf32_Addr r_offset; /* Address */
491 : Elf32_Word r_info; /* Relocation type and symbol index */
492 327244 : } Elf32_Rel;
493 :
494 : /* I have seen two different definitions of the Elf64_Rel and
495 : Elf64_Rela structures, so we'll leave them out until Novell (or
496 : whoever) gets their act together. */
497 : /* The following, at least, is used on Sparc v9, MIPS, and Alpha. */
498 :
499 : typedef struct
500 : {
501 : Elf64_Addr r_offset; /* Address */
502 : Elf64_Xword r_info; /* Relocation type and symbol index */
503 : } Elf64_Rel;
504 :
505 : /* Relocation table entry with addend (in section of type SHT_RELA). */
506 :
507 : typedef struct
508 : {
509 : Elf32_Addr r_offset; /* Address */
510 : Elf32_Word r_info; /* Relocation type and symbol index */
511 : Elf32_Sword r_addend; /* Addend */
512 0 : } Elf32_Rela;
513 :
514 : typedef struct
515 : {
516 : Elf64_Addr r_offset; /* Address */
517 : Elf64_Xword r_info; /* Relocation type and symbol index */
518 : Elf64_Sxword r_addend; /* Addend */
519 : } Elf64_Rela;
520 :
521 : /* How to extract and insert information held in the r_info field. */
522 :
523 : #define ELF32_R_SYM(val) ((val) >> 8)
524 : #define ELF32_R_TYPE(val) ((val) & 0xff)
525 : #define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff))
526 :
527 : #define ELF64_R_SYM(i) ((i) >> 32)
528 : #define ELF64_R_TYPE(i) ((i) & 0xffffffff)
529 : #define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type))
530 :
531 : /* Program segment header. */
532 :
533 : typedef struct
534 : {
535 : Elf32_Word p_type; /* Segment type */
536 : Elf32_Off p_offset; /* Segment file offset */
537 : Elf32_Addr p_vaddr; /* Segment virtual address */
538 : Elf32_Addr p_paddr; /* Segment physical address */
539 : Elf32_Word p_filesz; /* Segment size in file */
540 : Elf32_Word p_memsz; /* Segment size in memory */
541 : Elf32_Word p_flags; /* Segment flags */
542 : Elf32_Word p_align; /* Segment alignment */
543 119 : } Elf32_Phdr;
544 :
545 : typedef struct
546 : {
547 : Elf64_Word p_type; /* Segment type */
548 : Elf64_Word p_flags; /* Segment flags */
549 : Elf64_Off p_offset; /* Segment file offset */
550 : Elf64_Addr p_vaddr; /* Segment virtual address */
551 : Elf64_Addr p_paddr; /* Segment physical address */
552 : Elf64_Xword p_filesz; /* Segment size in file */
553 : Elf64_Xword p_memsz; /* Segment size in memory */
554 : Elf64_Xword p_align; /* Segment alignment */
555 : } Elf64_Phdr;
556 :
557 : /* Legal values for p_type (segment type). */
558 :
559 : #define PT_NULL 0 /* Program header table entry unused */
560 : #define PT_LOAD 1 /* Loadable program segment */
561 : #define PT_DYNAMIC 2 /* Dynamic linking information */
562 : #define PT_INTERP 3 /* Program interpreter */
563 : #define PT_NOTE 4 /* Auxiliary information */
564 : #define PT_SHLIB 5 /* Reserved */
565 : #define PT_PHDR 6 /* Entry for header table itself */
566 : #define PT_TLS 7 /* Thread-local storage segment */
567 : #define PT_NUM 8 /* Number of defined types */
568 : #define PT_LOOS 0x60000000 /* Start of OS-specific */
569 : #define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
570 : #define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
571 : #define PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */
572 : #define PT_LOSUNW 0x6ffffffa
573 : #define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */
574 : #define PT_SUNWSTACK 0x6ffffffb /* Stack segment */
575 : #define PT_HISUNW 0x6fffffff
576 : #define PT_HIOS 0x6fffffff /* End of OS-specific */
577 : #define PT_LOPROC 0x70000000 /* Start of processor-specific */
578 : #define PT_HIPROC 0x7fffffff /* End of processor-specific */
579 :
580 : /* Legal values for p_flags (segment flags). */
581 :
582 : #define PF_X (1 << 0) /* Segment is executable */
583 : #define PF_W (1 << 1) /* Segment is writable */
584 : #define PF_R (1 << 2) /* Segment is readable */
585 : #define PF_MASKOS 0x0ff00000 /* OS-specific */
586 : #define PF_MASKPROC 0xf0000000 /* Processor-specific */
587 :
588 : /* Legal values for note segment descriptor types for core files. */
589 :
590 : #define NT_PRSTATUS 1 /* Contains copy of prstatus struct */
591 : #define NT_FPREGSET 2 /* Contains copy of fpregset struct */
592 : #define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */
593 : #define NT_PRXREG 4 /* Contains copy of prxregset struct */
594 : #define NT_TASKSTRUCT 4 /* Contains copy of task structure */
595 : #define NT_PLATFORM 5 /* String from sysinfo(SI_PLATFORM) */
596 : #define NT_AUXV 6 /* Contains copy of auxv array */
597 : #define NT_GWINDOWS 7 /* Contains copy of gwindows struct */
598 : #define NT_ASRS 8 /* Contains copy of asrset struct */
599 : #define NT_PSTATUS 10 /* Contains copy of pstatus struct */
600 : #define NT_PSINFO 13 /* Contains copy of psinfo struct */
601 : #define NT_PRCRED 14 /* Contains copy of prcred struct */
602 : #define NT_UTSNAME 15 /* Contains copy of utsname struct */
603 : #define NT_LWPSTATUS 16 /* Contains copy of lwpstatus struct */
604 : #define NT_LWPSINFO 17 /* Contains copy of lwpinfo struct */
605 : #define NT_PRFPXREG 20 /* Contains copy of fprxregset struct*/
606 :
607 : /* Legal values for the note segment descriptor types for object files. */
608 :
609 : #define NT_VERSION 1 /* Contains a version string. */
610 :
611 :
612 : /* Dynamic section entry. */
613 :
614 : typedef struct
615 : {
616 : Elf32_Sword d_tag; /* Dynamic entry type */
617 : union
618 : {
619 : Elf32_Word d_val; /* Integer value */
620 : Elf32_Addr d_ptr; /* Address value */
621 : } d_un;
622 895 : } Elf32_Dyn;
623 :
624 : typedef struct
625 : {
626 : Elf64_Sxword d_tag; /* Dynamic entry type */
627 : union
628 : {
629 : Elf64_Xword d_val; /* Integer value */
630 : Elf64_Addr d_ptr; /* Address value */
631 : } d_un;
632 : } Elf64_Dyn;
633 :
634 : /* Legal values for d_tag (dynamic entry type). */
635 :
636 : #define DT_NULL 0 /* Marks end of dynamic section */
637 : #define DT_NEEDED 1 /* Name of needed library */
638 : #define DT_PLTRELSZ 2 /* Size in bytes of PLT relocs */
639 : #define DT_PLTGOT 3 /* Processor defined value */
640 : #define DT_HASH 4 /* Address of symbol hash table */
641 : #define DT_STRTAB 5 /* Address of string table */
642 : #define DT_SYMTAB 6 /* Address of symbol table */
643 : #define DT_RELA 7 /* Address of Rela relocs */
644 : #define DT_RELASZ 8 /* Total size of Rela relocs */
645 : #define DT_RELAENT 9 /* Size of one Rela reloc */
646 : #define DT_STRSZ 10 /* Size of string table */
647 : #define DT_SYMENT 11 /* Size of one symbol table entry */
648 : #define DT_INIT 12 /* Address of init function */
649 : #define DT_FINI 13 /* Address of termination function */
650 : #define DT_SONAME 14 /* Name of shared object */
651 : #define DT_RPATH 15 /* Library search path (deprecated) */
652 : #define DT_SYMBOLIC 16 /* Start symbol search here */
653 : #define DT_REL 17 /* Address of Rel relocs */
654 : #define DT_RELSZ 18 /* Total size of Rel relocs */
655 : #define DT_RELENT 19 /* Size of one Rel reloc */
656 : #define DT_PLTREL 20 /* Type of reloc in PLT */
657 : #define DT_DEBUG 21 /* For debugging; unspecified */
658 : #define DT_TEXTREL 22 /* Reloc might modify .text */
659 : #define DT_JMPREL 23 /* Address of PLT relocs */
660 : #define DT_BIND_NOW 24 /* Process relocations of object */
661 : #define DT_INIT_ARRAY 25 /* Array with addresses of init fct */
662 : #define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */
663 : #define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */
664 : #define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */
665 : #define DT_RUNPATH 29 /* Library search path */
666 : #define DT_FLAGS 30 /* Flags for the object being loaded */
667 : #define DT_ENCODING 32 /* Start of encoded range */
668 : #define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/
669 : #define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */
670 : #define DT_NUM 34 /* Number used */
671 : #define DT_LOOS 0x6000000d /* Start of OS-specific */
672 : #define DT_HIOS 0x6ffff000 /* End of OS-specific */
673 : #define DT_LOPROC 0x70000000 /* Start of processor-specific */
674 : #define DT_HIPROC 0x7fffffff /* End of processor-specific */
675 : #define DT_PROCNUM DT_MIPS_NUM /* Most used by any processor */
676 :
677 : /* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
678 : Dyn.d_un.d_val field of the Elf*_Dyn structure. This follows Sun's
679 : approach. */
680 : #define DT_VALRNGLO 0x6ffffd00
681 : #define DT_GNU_PRELINKED 0x6ffffdf5 /* Prelinking timestamp */
682 : #define DT_GNU_CONFLICTSZ 0x6ffffdf6 /* Size of conflict section */
683 : #define DT_GNU_LIBLISTSZ 0x6ffffdf7 /* Size of library list */
684 : #define DT_CHECKSUM 0x6ffffdf8
685 : #define DT_PLTPADSZ 0x6ffffdf9
686 : #define DT_MOVEENT 0x6ffffdfa
687 : #define DT_MOVESZ 0x6ffffdfb
688 : #define DT_FEATURE_1 0x6ffffdfc /* Feature selection (DTF_*). */
689 : #define DT_POSFLAG_1 0x6ffffdfd /* Flags for DT_* entries, effecting
690 : the following DT_* entry. */
691 : #define DT_SYMINSZ 0x6ffffdfe /* Size of syminfo table (in bytes) */
692 : #define DT_SYMINENT 0x6ffffdff /* Entry size of syminfo */
693 : #define DT_VALRNGHI 0x6ffffdff
694 : #define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) /* Reverse order! */
695 : #define DT_VALNUM 12
696 :
697 : /* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
698 : Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
699 :
700 : If any adjustment is made to the ELF object after it has been
701 : built these entries will need to be adjusted. */
702 : #define DT_ADDRRNGLO 0x6ffffe00
703 : #define DT_GNU_HASH 0x6ffffef5 /* GNU-style hash table. */
704 : #define DT_TLSDESC_PLT 0x6ffffef6
705 : #define DT_TLSDESC_GOT 0x6ffffef7
706 : #define DT_GNU_CONFLICT 0x6ffffef8 /* Start of conflict section */
707 : #define DT_GNU_LIBLIST 0x6ffffef9 /* Library list */
708 : #define DT_CONFIG 0x6ffffefa /* Configuration information. */
709 : #define DT_DEPAUDIT 0x6ffffefb /* Dependency auditing. */
710 : #define DT_AUDIT 0x6ffffefc /* Object auditing. */
711 : #define DT_PLTPAD 0x6ffffefd /* PLT padding. */
712 : #define DT_MOVETAB 0x6ffffefe /* Move table. */
713 : #define DT_SYMINFO 0x6ffffeff /* Syminfo table. */
714 : #define DT_ADDRRNGHI 0x6ffffeff
715 : #define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) /* Reverse order! */
716 : #define DT_ADDRNUM 11
717 :
718 : /* The versioning entry types. The next are defined as part of the
719 : GNU extension. */
720 : #define DT_VERSYM 0x6ffffff0
721 :
722 : #define DT_RELACOUNT 0x6ffffff9
723 : #define DT_RELCOUNT 0x6ffffffa
724 :
725 : /* These were chosen by Sun. */
726 : #define DT_FLAGS_1 0x6ffffffb /* State flags, see DF_1_* below. */
727 : #define DT_VERDEF 0x6ffffffc /* Address of version definition
728 : table */
729 : #define DT_VERDEFNUM 0x6ffffffd /* Number of version definitions */
730 : #define DT_VERNEED 0x6ffffffe /* Address of table with needed
731 : versions */
732 : #define DT_VERNEEDNUM 0x6fffffff /* Number of needed versions */
733 : #define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) /* Reverse order! */
734 : #define DT_VERSIONTAGNUM 16
735 :
736 : /* Sun added these machine-independent extensions in the "processor-specific"
737 : range. Be compatible. */
738 : #define DT_AUXILIARY 0x7ffffffd /* Shared object to load before self */
739 : #define DT_FILTER 0x7fffffff /* Shared object to get values from */
740 : #define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
741 : #define DT_EXTRANUM 3
742 :
743 : /* Values of `d_un.d_val' in the DT_FLAGS entry. */
744 : #define DF_ORIGIN 0x00000001 /* Object may use DF_ORIGIN */
745 : #define DF_SYMBOLIC 0x00000002 /* Symbol resolutions starts here */
746 : #define DF_TEXTREL 0x00000004 /* Object contains text relocations */
747 : #define DF_BIND_NOW 0x00000008 /* No lazy binding for this object */
748 : #define DF_STATIC_TLS 0x00000010 /* Module uses the static TLS model */
749 :
750 : /* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
751 : entry in the dynamic section. */
752 : #define DF_1_NOW 0x00000001 /* Set RTLD_NOW for this object. */
753 : #define DF_1_GLOBAL 0x00000002 /* Set RTLD_GLOBAL for this object. */
754 : #define DF_1_GROUP 0x00000004 /* Set RTLD_GROUP for this object. */
755 : #define DF_1_NODELETE 0x00000008 /* Set RTLD_NODELETE for this object.*/
756 : #define DF_1_LOADFLTR 0x00000010 /* Trigger filtee loading at runtime.*/
757 : #define DF_1_INITFIRST 0x00000020 /* Set RTLD_INITFIRST for this object*/
758 : #define DF_1_NOOPEN 0x00000040 /* Set RTLD_NOOPEN for this object. */
759 : #define DF_1_ORIGIN 0x00000080 /* $ORIGIN must be handled. */
760 : #define DF_1_DIRECT 0x00000100 /* Direct binding enabled. */
761 : #define DF_1_TRANS 0x00000200
762 : #define DF_1_INTERPOSE 0x00000400 /* Object is used to interpose. */
763 : #define DF_1_NODEFLIB 0x00000800 /* Ignore default lib search path. */
764 : #define DF_1_NODUMP 0x00001000 /* Object can't be dldump'ed. */
765 : #define DF_1_CONFALT 0x00002000 /* Configuration alternative created.*/
766 : #define DF_1_ENDFILTEE 0x00004000 /* Filtee terminates filters search. */
767 : #define DF_1_DISPRELDNE 0x00008000 /* Disp reloc applied at build time. */
768 : #define DF_1_DISPRELPND 0x00010000 /* Disp reloc applied at run-time. */
769 :
770 : /* Flags for the feature selection in DT_FEATURE_1. */
771 : #define DTF_1_PARINIT 0x00000001
772 : #define DTF_1_CONFEXP 0x00000002
773 :
774 : /* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry. */
775 : #define DF_P1_LAZYLOAD 0x00000001 /* Lazyload following object. */
776 : #define DF_P1_GROUPPERM 0x00000002 /* Symbols from next object are not
777 : generally available. */
778 :
779 : /* Version definition sections. */
780 :
781 : typedef struct
782 : {
783 : Elf32_Half vd_version; /* Version revision */
784 : Elf32_Half vd_flags; /* Version information */
785 : Elf32_Half vd_ndx; /* Version Index */
786 : Elf32_Half vd_cnt; /* Number of associated aux entries */
787 : Elf32_Word vd_hash; /* Version name hash value */
788 : Elf32_Word vd_aux; /* Offset in bytes to verdaux array */
789 : Elf32_Word vd_next; /* Offset in bytes to next verdef
790 : entry */
791 : } Elf32_Verdef;
792 :
793 : typedef struct
794 : {
795 : Elf64_Half vd_version; /* Version revision */
796 : Elf64_Half vd_flags; /* Version information */
797 : Elf64_Half vd_ndx; /* Version Index */
798 : Elf64_Half vd_cnt; /* Number of associated aux entries */
799 : Elf64_Word vd_hash; /* Version name hash value */
800 : Elf64_Word vd_aux; /* Offset in bytes to verdaux array */
801 : Elf64_Word vd_next; /* Offset in bytes to next verdef
802 : entry */
803 : } Elf64_Verdef;
804 :
805 :
806 : /* Legal values for vd_version (version revision). */
807 : #define VER_DEF_NONE 0 /* No version */
808 : #define VER_DEF_CURRENT 1 /* Current version */
809 : #define VER_DEF_NUM 2 /* Given version number */
810 :
811 : /* Legal values for vd_flags (version information flags). */
812 : #define VER_FLG_BASE 0x1 /* Version definition of file itself */
813 : #define VER_FLG_WEAK 0x2 /* Weak version identifier */
814 :
815 : /* Versym symbol index values. */
816 : #define VER_NDX_LOCAL 0 /* Symbol is local. */
817 : #define VER_NDX_GLOBAL 1 /* Symbol is global. */
818 : #define VER_NDX_LORESERVE 0xff00 /* Beginning of reserved entries. */
819 : #define VER_NDX_ELIMINATE 0xff01 /* Symbol is to be eliminated. */
820 :
821 : /* Auxialiary version information. */
822 :
823 : typedef struct
824 : {
825 : Elf32_Word vda_name; /* Version or dependency names */
826 : Elf32_Word vda_next; /* Offset in bytes to next verdaux
827 : entry */
828 : } Elf32_Verdaux;
829 :
830 : typedef struct
831 : {
832 : Elf64_Word vda_name; /* Version or dependency names */
833 : Elf64_Word vda_next; /* Offset in bytes to next verdaux
834 : entry */
835 : } Elf64_Verdaux;
836 :
837 :
838 : /* Version dependency section. */
839 :
840 : typedef struct
841 : {
842 : Elf32_Half vn_version; /* Version of structure */
843 : Elf32_Half vn_cnt; /* Number of associated aux entries */
844 : Elf32_Word vn_file; /* Offset of filename for this
845 : dependency */
846 : Elf32_Word vn_aux; /* Offset in bytes to vernaux array */
847 : Elf32_Word vn_next; /* Offset in bytes to next verneed
848 : entry */
849 : } Elf32_Verneed;
850 :
851 : typedef struct
852 : {
853 : Elf64_Half vn_version; /* Version of structure */
854 : Elf64_Half vn_cnt; /* Number of associated aux entries */
855 : Elf64_Word vn_file; /* Offset of filename for this
856 : dependency */
857 : Elf64_Word vn_aux; /* Offset in bytes to vernaux array */
858 : Elf64_Word vn_next; /* Offset in bytes to next verneed
859 : entry */
860 : } Elf64_Verneed;
861 :
862 :
863 : /* Legal values for vn_version (version revision). */
864 : #define VER_NEED_NONE 0 /* No version */
865 : #define VER_NEED_CURRENT 1 /* Current version */
866 : #define VER_NEED_NUM 2 /* Given version number */
867 :
868 : /* Auxiliary needed version information. */
869 :
870 : typedef struct
871 : {
872 : Elf32_Word vna_hash; /* Hash value of dependency name */
873 : Elf32_Half vna_flags; /* Dependency specific information */
874 : Elf32_Half vna_other; /* Unused */
875 : Elf32_Word vna_name; /* Dependency name string offset */
876 : Elf32_Word vna_next; /* Offset in bytes to next vernaux
877 : entry */
878 : } Elf32_Vernaux;
879 :
880 : typedef struct
881 : {
882 : Elf64_Word vna_hash; /* Hash value of dependency name */
883 : Elf64_Half vna_flags; /* Dependency specific information */
884 : Elf64_Half vna_other; /* Unused */
885 : Elf64_Word vna_name; /* Dependency name string offset */
886 : Elf64_Word vna_next; /* Offset in bytes to next vernaux
887 : entry */
888 : } Elf64_Vernaux;
889 :
890 :
891 : /* Legal values for vna_flags. */
892 : #define VER_FLG_WEAK 0x2 /* Weak version identifier */
893 :
894 :
895 : /* Auxiliary vector. */
896 :
897 : /* This vector is normally only used by the program interpreter. The
898 : usual definition in an ABI supplement uses the name auxv_t. The
899 : vector is not usually defined in a standard <elf.h> file, but it
900 : can't hurt. We rename it to avoid conflicts. The sizes of these
901 : types are an arrangement between the exec server and the program
902 : interpreter, so we don't fully specify them here. */
903 :
904 : typedef struct
905 : {
906 : uint32_t a_type; /* Entry type */
907 : union
908 : {
909 : uint32_t a_val; /* Integer value */
910 : /* We use to have pointer elements added here. We cannot do that,
911 : though, since it does not work when using 32-bit definitions
912 : on 64-bit platforms and vice versa. */
913 : } a_un;
914 : } Elf32_auxv_t;
915 :
916 : typedef struct
917 : {
918 : uint64_t a_type; /* Entry type */
919 : union
920 : {
921 : uint64_t a_val; /* Integer value */
922 : /* We use to have pointer elements added here. We cannot do that,
923 : though, since it does not work when using 32-bit definitions
924 : on 64-bit platforms and vice versa. */
925 : } a_un;
926 : } Elf64_auxv_t;
927 :
928 : /* Legal values for a_type (entry type). */
929 :
930 : #define AT_NULL 0 /* End of vector */
931 : #define AT_IGNORE 1 /* Entry should be ignored */
932 : #define AT_EXECFD 2 /* File descriptor of program */
933 : #define AT_PHDR 3 /* Program headers for program */
934 : #define AT_PHENT 4 /* Size of program header entry */
935 : #define AT_PHNUM 5 /* Number of program headers */
936 : #define AT_PAGESZ 6 /* System page size */
937 : #define AT_BASE 7 /* Base address of interpreter */
938 : #define AT_FLAGS 8 /* Flags */
939 : #define AT_ENTRY 9 /* Entry point of program */
940 : #define AT_NOTELF 10 /* Program is not ELF */
941 : #define AT_UID 11 /* Real uid */
942 : #define AT_EUID 12 /* Effective uid */
943 : #define AT_GID 13 /* Real gid */
944 : #define AT_EGID 14 /* Effective gid */
945 : #define AT_CLKTCK 17 /* Frequency of times() */
946 :
947 : /* Some more special a_type values describing the hardware. */
948 : #define AT_PLATFORM 15 /* String identifying platform. */
949 : #define AT_HWCAP 16 /* Machine dependent hints about
950 : processor capabilities. */
951 :
952 : /* This entry gives some information about the FPU initialization
953 : performed by the kernel. */
954 : #define AT_FPUCW 18 /* Used FPU control word. */
955 :
956 : /* Cache block sizes. */
957 : #define AT_DCACHEBSIZE 19 /* Data cache block size. */
958 : #define AT_ICACHEBSIZE 20 /* Instruction cache block size. */
959 : #define AT_UCACHEBSIZE 21 /* Unified cache block size. */
960 :
961 : /* A special ignored value for PPC, used by the kernel to control the
962 : interpretation of the AUXV. Must be > 16. */
963 : #define AT_IGNOREPPC 22 /* Entry should be ignored. */
964 :
965 : #define AT_SECURE 23 /* Boolean, was exec setuid-like? */
966 :
967 : /* Pointer to the global system page used for system calls and other
968 : nice things. */
969 : #define AT_SYSINFO 32
970 : #define AT_SYSINFO_EHDR 33
971 :
972 : /* Shapes of the caches. Bits 0-3 contains associativity; bits 4-7 contains
973 : log2 of line size; mask those to get cache size. */
974 : #define AT_L1I_CACHESHAPE 34
975 : #define AT_L1D_CACHESHAPE 35
976 : #define AT_L2_CACHESHAPE 36
977 : #define AT_L3_CACHESHAPE 37
978 :
979 : /* Note section contents. Each entry in the note section begins with
980 : a header of a fixed form. */
981 :
982 : typedef struct
983 : {
984 : Elf32_Word n_namesz; /* Length of the note's name. */
985 : Elf32_Word n_descsz; /* Length of the note's descriptor. */
986 : Elf32_Word n_type; /* Type of the note. */
987 : } Elf32_Nhdr;
988 :
989 : typedef struct
990 : {
991 : Elf64_Word n_namesz; /* Length of the note's name. */
992 : Elf64_Word n_descsz; /* Length of the note's descriptor. */
993 : Elf64_Word n_type; /* Type of the note. */
994 : } Elf64_Nhdr;
995 :
996 : /* Known names of notes. */
997 :
998 : /* Solaris entries in the note section have this name. */
999 : #define ELF_NOTE_SOLARIS "SUNW Solaris"
1000 :
1001 : /* Note entries for GNU systems have this name. */
1002 : #define ELF_NOTE_GNU "GNU"
1003 :
1004 :
1005 : /* Defined types of notes for Solaris. */
1006 :
1007 : /* Value of descriptor (one word) is desired pagesize for the binary. */
1008 : #define ELF_NOTE_PAGESIZE_HINT 1
1009 :
1010 :
1011 : /* Defined note types for GNU systems. */
1012 :
1013 : /* ABI information. The descriptor consists of words:
1014 : word 0: OS descriptor
1015 : word 1: major version of the ABI
1016 : word 2: minor version of the ABI
1017 : word 3: subminor version of the ABI
1018 : */
1019 : #define ELF_NOTE_ABI 1
1020 :
1021 : /* Known OSes. These value can appear in word 0 of an ELF_NOTE_ABI
1022 : note section entry. */
1023 : #define ELF_NOTE_OS_LINUX 0
1024 : #define ELF_NOTE_OS_GNU 1
1025 : #define ELF_NOTE_OS_SOLARIS2 2
1026 : #define ELF_NOTE_OS_FREEBSD 3
1027 :
1028 :
1029 : /* Move records. */
1030 : typedef struct
1031 : {
1032 : Elf32_Xword m_value; /* Symbol value. */
1033 : Elf32_Word m_info; /* Size and index. */
1034 : Elf32_Word m_poffset; /* Symbol offset. */
1035 : Elf32_Half m_repeat; /* Repeat count. */
1036 : Elf32_Half m_stride; /* Stride info. */
1037 : } Elf32_Move;
1038 :
1039 : typedef struct
1040 : {
1041 : Elf64_Xword m_value; /* Symbol value. */
1042 : Elf64_Xword m_info; /* Size and index. */
1043 : Elf64_Xword m_poffset; /* Symbol offset. */
1044 : Elf64_Half m_repeat; /* Repeat count. */
1045 : Elf64_Half m_stride; /* Stride info. */
1046 : } Elf64_Move;
1047 :
1048 : /* Macro to construct move records. */
1049 : #define ELF32_M_SYM(info) ((info) >> 8)
1050 : #define ELF32_M_SIZE(info) ((unsigned char) (info))
1051 : #define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size))
1052 :
1053 : #define ELF64_M_SYM(info) ELF32_M_SYM (info)
1054 : #define ELF64_M_SIZE(info) ELF32_M_SIZE (info)
1055 : #define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size)
1056 :
1057 :
1058 : /* Motorola 68k specific definitions. */
1059 :
1060 : /* Values for Elf32_Ehdr.e_flags. */
1061 : #define EF_CPU32 0x00810000
1062 :
1063 : /* m68k relocs. */
1064 :
1065 : #define R_68K_NONE 0 /* No reloc */
1066 : #define R_68K_32 1 /* Direct 32 bit */
1067 : #define R_68K_16 2 /* Direct 16 bit */
1068 : #define R_68K_8 3 /* Direct 8 bit */
1069 : #define R_68K_PC32 4 /* PC relative 32 bit */
1070 : #define R_68K_PC16 5 /* PC relative 16 bit */
1071 : #define R_68K_PC8 6 /* PC relative 8 bit */
1072 : #define R_68K_GOT32 7 /* 32 bit PC relative GOT entry */
1073 : #define R_68K_GOT16 8 /* 16 bit PC relative GOT entry */
1074 : #define R_68K_GOT8 9 /* 8 bit PC relative GOT entry */
1075 : #define R_68K_GOT32O 10 /* 32 bit GOT offset */
1076 : #define R_68K_GOT16O 11 /* 16 bit GOT offset */
1077 : #define R_68K_GOT8O 12 /* 8 bit GOT offset */
1078 : #define R_68K_PLT32 13 /* 32 bit PC relative PLT address */
1079 : #define R_68K_PLT16 14 /* 16 bit PC relative PLT address */
1080 : #define R_68K_PLT8 15 /* 8 bit PC relative PLT address */
1081 : #define R_68K_PLT32O 16 /* 32 bit PLT offset */
1082 : #define R_68K_PLT16O 17 /* 16 bit PLT offset */
1083 : #define R_68K_PLT8O 18 /* 8 bit PLT offset */
1084 : #define R_68K_COPY 19 /* Copy symbol at runtime */
1085 : #define R_68K_GLOB_DAT 20 /* Create GOT entry */
1086 : #define R_68K_JMP_SLOT 21 /* Create PLT entry */
1087 : #define R_68K_RELATIVE 22 /* Adjust by program base */
1088 : /* Keep this the last entry. */
1089 : #define R_68K_NUM 23
1090 :
1091 : /* Intel 80386 specific definitions. */
1092 :
1093 : /* i386 relocs. */
1094 :
1095 : #define R_386_NONE 0 /* No reloc */
1096 : #define R_386_32 1 /* Direct 32 bit */
1097 : #define R_386_PC32 2 /* PC relative 32 bit */
1098 : #define R_386_GOT32 3 /* 32 bit GOT entry */
1099 : #define R_386_PLT32 4 /* 32 bit PLT address */
1100 : #define R_386_COPY 5 /* Copy symbol at runtime */
1101 : #define R_386_GLOB_DAT 6 /* Create GOT entry */
1102 : #define R_386_JMP_SLOT 7 /* Create PLT entry */
1103 : #define R_386_RELATIVE 8 /* Adjust by program base */
1104 : #define R_386_GOTOFF 9 /* 32 bit offset to GOT */
1105 : #define R_386_GOTPC 10 /* 32 bit PC relative offset to GOT */
1106 : #define R_386_32PLT 11
1107 : #define R_386_TLS_TPOFF 14 /* Offset in static TLS block */
1108 : #define R_386_TLS_IE 15 /* Address of GOT entry for static TLS
1109 : block offset */
1110 : #define R_386_TLS_GOTIE 16 /* GOT entry for static TLS block
1111 : offset */
1112 : #define R_386_TLS_LE 17 /* Offset relative to static TLS
1113 : block */
1114 : #define R_386_TLS_GD 18 /* Direct 32 bit for GNU version of
1115 : general dynamic thread local data */
1116 : #define R_386_TLS_LDM 19 /* Direct 32 bit for GNU version of
1117 : local dynamic thread local data
1118 : in LE code */
1119 : #define R_386_16 20
1120 : #define R_386_PC16 21
1121 : #define R_386_8 22
1122 : #define R_386_PC8 23
1123 : #define R_386_TLS_GD_32 24 /* Direct 32 bit for general dynamic
1124 : thread local data */
1125 : #define R_386_TLS_GD_PUSH 25 /* Tag for pushl in GD TLS code */
1126 : #define R_386_TLS_GD_CALL 26 /* Relocation for call to
1127 : __tls_get_addr() */
1128 : #define R_386_TLS_GD_POP 27 /* Tag for popl in GD TLS code */
1129 : #define R_386_TLS_LDM_32 28 /* Direct 32 bit for local dynamic
1130 : thread local data in LE code */
1131 : #define R_386_TLS_LDM_PUSH 29 /* Tag for pushl in LDM TLS code */
1132 : #define R_386_TLS_LDM_CALL 30 /* Relocation for call to
1133 : __tls_get_addr() in LDM code */
1134 : #define R_386_TLS_LDM_POP 31 /* Tag for popl in LDM TLS code */
1135 : #define R_386_TLS_LDO_32 32 /* Offset relative to TLS block */
1136 : #define R_386_TLS_IE_32 33 /* GOT entry for negated static TLS
1137 : block offset */
1138 : #define R_386_TLS_LE_32 34 /* Negated offset relative to static
1139 : TLS block */
1140 : #define R_386_TLS_DTPMOD32 35 /* ID of module containing symbol */
1141 : #define R_386_TLS_DTPOFF32 36 /* Offset in TLS block */
1142 : #define R_386_TLS_TPOFF32 37 /* Negated offset in static TLS block */
1143 : /* Keep this the last entry. */
1144 : #define R_386_NUM 38
1145 :
1146 : /* SUN SPARC specific definitions. */
1147 :
1148 : /* Legal values for ST_TYPE subfield of st_info (symbol type). */
1149 :
1150 : #define STT_SPARC_REGISTER 13 /* Global register reserved to app. */
1151 :
1152 : /* Values for Elf64_Ehdr.e_flags. */
1153 :
1154 : #define EF_SPARCV9_MM 3
1155 : #define EF_SPARCV9_TSO 0
1156 : #define EF_SPARCV9_PSO 1
1157 : #define EF_SPARCV9_RMO 2
1158 : #define EF_SPARC_LEDATA 0x800000 /* little endian data */
1159 : #define EF_SPARC_EXT_MASK 0xFFFF00
1160 : #define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */
1161 : #define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */
1162 : #define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */
1163 : #define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARCIII extensions */
1164 :
1165 : /* SPARC relocs. */
1166 :
1167 : #define R_SPARC_NONE 0 /* No reloc */
1168 : #define R_SPARC_8 1 /* Direct 8 bit */
1169 : #define R_SPARC_16 2 /* Direct 16 bit */
1170 : #define R_SPARC_32 3 /* Direct 32 bit */
1171 : #define R_SPARC_DISP8 4 /* PC relative 8 bit */
1172 : #define R_SPARC_DISP16 5 /* PC relative 16 bit */
1173 : #define R_SPARC_DISP32 6 /* PC relative 32 bit */
1174 : #define R_SPARC_WDISP30 7 /* PC relative 30 bit shifted */
1175 : #define R_SPARC_WDISP22 8 /* PC relative 22 bit shifted */
1176 : #define R_SPARC_HI22 9 /* High 22 bit */
1177 : #define R_SPARC_22 10 /* Direct 22 bit */
1178 : #define R_SPARC_13 11 /* Direct 13 bit */
1179 : #define R_SPARC_LO10 12 /* Truncated 10 bit */
1180 : #define R_SPARC_GOT10 13 /* Truncated 10 bit GOT entry */
1181 : #define R_SPARC_GOT13 14 /* 13 bit GOT entry */
1182 : #define R_SPARC_GOT22 15 /* 22 bit GOT entry shifted */
1183 : #define R_SPARC_PC10 16 /* PC relative 10 bit truncated */
1184 : #define R_SPARC_PC22 17 /* PC relative 22 bit shifted */
1185 : #define R_SPARC_WPLT30 18 /* 30 bit PC relative PLT address */
1186 : #define R_SPARC_COPY 19 /* Copy symbol at runtime */
1187 : #define R_SPARC_GLOB_DAT 20 /* Create GOT entry */
1188 : #define R_SPARC_JMP_SLOT 21 /* Create PLT entry */
1189 : #define R_SPARC_RELATIVE 22 /* Adjust by program base */
1190 : #define R_SPARC_UA32 23 /* Direct 32 bit unaligned */
1191 :
1192 : /* Additional Sparc64 relocs. */
1193 :
1194 : #define R_SPARC_PLT32 24 /* Direct 32 bit ref to PLT entry */
1195 : #define R_SPARC_HIPLT22 25 /* High 22 bit PLT entry */
1196 : #define R_SPARC_LOPLT10 26 /* Truncated 10 bit PLT entry */
1197 : #define R_SPARC_PCPLT32 27 /* PC rel 32 bit ref to PLT entry */
1198 : #define R_SPARC_PCPLT22 28 /* PC rel high 22 bit PLT entry */
1199 : #define R_SPARC_PCPLT10 29 /* PC rel trunc 10 bit PLT entry */
1200 : #define R_SPARC_10 30 /* Direct 10 bit */
1201 : #define R_SPARC_11 31 /* Direct 11 bit */
1202 : #define R_SPARC_64 32 /* Direct 64 bit */
1203 : #define R_SPARC_OLO10 33 /* 10bit with secondary 13bit addend */
1204 : #define R_SPARC_HH22 34 /* Top 22 bits of direct 64 bit */
1205 : #define R_SPARC_HM10 35 /* High middle 10 bits of ... */
1206 : #define R_SPARC_LM22 36 /* Low middle 22 bits of ... */
1207 : #define R_SPARC_PC_HH22 37 /* Top 22 bits of pc rel 64 bit */
1208 : #define R_SPARC_PC_HM10 38 /* High middle 10 bit of ... */
1209 : #define R_SPARC_PC_LM22 39 /* Low miggle 22 bits of ... */
1210 : #define R_SPARC_WDISP16 40 /* PC relative 16 bit shifted */
1211 : #define R_SPARC_WDISP19 41 /* PC relative 19 bit shifted */
1212 : #define R_SPARC_7 43 /* Direct 7 bit */
1213 : #define R_SPARC_5 44 /* Direct 5 bit */
1214 : #define R_SPARC_6 45 /* Direct 6 bit */
1215 : #define R_SPARC_DISP64 46 /* PC relative 64 bit */
1216 : #define R_SPARC_PLT64 47 /* Direct 64 bit ref to PLT entry */
1217 : #define R_SPARC_HIX22 48 /* High 22 bit complemented */
1218 : #define R_SPARC_LOX10 49 /* Truncated 11 bit complemented */
1219 : #define R_SPARC_H44 50 /* Direct high 12 of 44 bit */
1220 : #define R_SPARC_M44 51 /* Direct mid 22 of 44 bit */
1221 : #define R_SPARC_L44 52 /* Direct low 10 of 44 bit */
1222 : #define R_SPARC_REGISTER 53 /* Global register usage */
1223 : #define R_SPARC_UA64 54 /* Direct 64 bit unaligned */
1224 : #define R_SPARC_UA16 55 /* Direct 16 bit unaligned */
1225 : #define R_SPARC_TLS_GD_HI22 56
1226 : #define R_SPARC_TLS_GD_LO10 57
1227 : #define R_SPARC_TLS_GD_ADD 58
1228 : #define R_SPARC_TLS_GD_CALL 59
1229 : #define R_SPARC_TLS_LDM_HI22 60
1230 : #define R_SPARC_TLS_LDM_LO10 61
1231 : #define R_SPARC_TLS_LDM_ADD 62
1232 : #define R_SPARC_TLS_LDM_CALL 63
1233 : #define R_SPARC_TLS_LDO_HIX22 64
1234 : #define R_SPARC_TLS_LDO_LOX10 65
1235 : #define R_SPARC_TLS_LDO_ADD 66
1236 : #define R_SPARC_TLS_IE_HI22 67
1237 : #define R_SPARC_TLS_IE_LO10 68
1238 : #define R_SPARC_TLS_IE_LD 69
1239 : #define R_SPARC_TLS_IE_LDX 70
1240 : #define R_SPARC_TLS_IE_ADD 71
1241 : #define R_SPARC_TLS_LE_HIX22 72
1242 : #define R_SPARC_TLS_LE_LOX10 73
1243 : #define R_SPARC_TLS_DTPMOD32 74
1244 : #define R_SPARC_TLS_DTPMOD64 75
1245 : #define R_SPARC_TLS_DTPOFF32 76
1246 : #define R_SPARC_TLS_DTPOFF64 77
1247 : #define R_SPARC_TLS_TPOFF32 78
1248 : #define R_SPARC_TLS_TPOFF64 79
1249 : /* Keep this the last entry. */
1250 : #define R_SPARC_NUM 80
1251 :
1252 : /* For Sparc64, legal values for d_tag of Elf64_Dyn. */
1253 :
1254 : #define DT_SPARC_REGISTER 0x70000001
1255 : #define DT_SPARC_NUM 2
1256 :
1257 : /* Bits present in AT_HWCAP on SPARC. */
1258 :
1259 : #define HWCAP_SPARC_FLUSH 1 /* The CPU supports flush insn. */
1260 : #define HWCAP_SPARC_STBAR 2
1261 : #define HWCAP_SPARC_SWAP 4
1262 : #define HWCAP_SPARC_MULDIV 8
1263 : #define HWCAP_SPARC_V9 16 /* The CPU is v9, so v8plus is ok. */
1264 : #define HWCAP_SPARC_ULTRA3 32
1265 : #define HWCAP_SPARC_BLKINIT 64 /* Sun4v with block-init/load-twin. */
1266 :
1267 : /* MIPS R3000 specific definitions. */
1268 :
1269 : /* Legal values for e_flags field of Elf32_Ehdr. */
1270 :
1271 : #define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used */
1272 : #define EF_MIPS_PIC 2 /* Contains PIC code */
1273 : #define EF_MIPS_CPIC 4 /* Uses PIC calling sequence */
1274 : #define EF_MIPS_XGOT 8
1275 : #define EF_MIPS_64BIT_WHIRL 16
1276 : #define EF_MIPS_ABI2 32
1277 : #define EF_MIPS_ABI_ON32 64
1278 : #define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level */
1279 :
1280 : /* Legal values for MIPS architecture level. */
1281 :
1282 : #define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */
1283 : #define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */
1284 : #define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */
1285 : #define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code. */
1286 : #define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
1287 : #define EF_MIPS_ARCH_32 0x60000000 /* MIPS32 code. */
1288 : #define EF_MIPS_ARCH_64 0x70000000 /* MIPS64 code. */
1289 :
1290 : /* The following are non-official names and should not be used. */
1291 :
1292 : #define E_MIPS_ARCH_1 0x00000000 /* -mips1 code. */
1293 : #define E_MIPS_ARCH_2 0x10000000 /* -mips2 code. */
1294 : #define E_MIPS_ARCH_3 0x20000000 /* -mips3 code. */
1295 : #define E_MIPS_ARCH_4 0x30000000 /* -mips4 code. */
1296 : #define E_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
1297 : #define E_MIPS_ARCH_32 0x60000000 /* MIPS32 code. */
1298 : #define E_MIPS_ARCH_64 0x70000000 /* MIPS64 code. */
1299 :
1300 : /* Special section indices. */
1301 :
1302 : #define SHN_MIPS_ACOMMON 0xff00 /* Allocated common symbols */
1303 : #define SHN_MIPS_TEXT 0xff01 /* Allocated test symbols. */
1304 : #define SHN_MIPS_DATA 0xff02 /* Allocated data symbols. */
1305 : #define SHN_MIPS_SCOMMON 0xff03 /* Small common symbols */
1306 : #define SHN_MIPS_SUNDEFINED 0xff04 /* Small undefined symbols */
1307 :
1308 : /* Legal values for sh_type field of Elf32_Shdr. */
1309 :
1310 : #define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link */
1311 : #define SHT_MIPS_MSYM 0x70000001
1312 : #define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols */
1313 : #define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes */
1314 : #define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */
1315 : #define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging information*/
1316 : #define SHT_MIPS_REGINFO 0x70000006 /* Register usage information */
1317 : #define SHT_MIPS_PACKAGE 0x70000007
1318 : #define SHT_MIPS_PACKSYM 0x70000008
1319 : #define SHT_MIPS_RELD 0x70000009
1320 : #define SHT_MIPS_IFACE 0x7000000b
1321 : #define SHT_MIPS_CONTENT 0x7000000c
1322 : #define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */
1323 : #define SHT_MIPS_SHDR 0x70000010
1324 : #define SHT_MIPS_FDESC 0x70000011
1325 : #define SHT_MIPS_EXTSYM 0x70000012
1326 : #define SHT_MIPS_DENSE 0x70000013
1327 : #define SHT_MIPS_PDESC 0x70000014
1328 : #define SHT_MIPS_LOCSYM 0x70000015
1329 : #define SHT_MIPS_AUXSYM 0x70000016
1330 : #define SHT_MIPS_OPTSYM 0x70000017
1331 : #define SHT_MIPS_LOCSTR 0x70000018
1332 : #define SHT_MIPS_LINE 0x70000019
1333 : #define SHT_MIPS_RFDESC 0x7000001a
1334 : #define SHT_MIPS_DELTASYM 0x7000001b
1335 : #define SHT_MIPS_DELTAINST 0x7000001c
1336 : #define SHT_MIPS_DELTACLASS 0x7000001d
1337 : #define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */
1338 : #define SHT_MIPS_DELTADECL 0x7000001f
1339 : #define SHT_MIPS_SYMBOL_LIB 0x70000020
1340 : #define SHT_MIPS_EVENTS 0x70000021 /* Event section. */
1341 : #define SHT_MIPS_TRANSLATE 0x70000022
1342 : #define SHT_MIPS_PIXIE 0x70000023
1343 : #define SHT_MIPS_XLATE 0x70000024
1344 : #define SHT_MIPS_XLATE_DEBUG 0x70000025
1345 : #define SHT_MIPS_WHIRL 0x70000026
1346 : #define SHT_MIPS_EH_REGION 0x70000027
1347 : #define SHT_MIPS_XLATE_OLD 0x70000028
1348 : #define SHT_MIPS_PDR_EXCEPTION 0x70000029
1349 :
1350 : /* Legal values for sh_flags field of Elf32_Shdr. */
1351 :
1352 : #define SHF_MIPS_GPREL 0x10000000 /* Must be part of global data area */
1353 : #define SHF_MIPS_MERGE 0x20000000
1354 : #define SHF_MIPS_ADDR 0x40000000
1355 : #define SHF_MIPS_STRINGS 0x80000000
1356 : #define SHF_MIPS_NOSTRIP 0x08000000
1357 : #define SHF_MIPS_LOCAL 0x04000000
1358 : #define SHF_MIPS_NAMES 0x02000000
1359 : #define SHF_MIPS_NODUPE 0x01000000
1360 :
1361 :
1362 : /* Symbol tables. */
1363 :
1364 : /* MIPS specific values for `st_other'. */
1365 : #define STO_MIPS_DEFAULT 0x0
1366 : #define STO_MIPS_INTERNAL 0x1
1367 : #define STO_MIPS_HIDDEN 0x2
1368 : #define STO_MIPS_PROTECTED 0x3
1369 : #define STO_MIPS_SC_ALIGN_UNUSED 0xff
1370 :
1371 : /* MIPS specific values for `st_info'. */
1372 : #define STB_MIPS_SPLIT_COMMON 13
1373 :
1374 : /* Entries found in sections of type SHT_MIPS_GPTAB. */
1375 :
1376 : typedef union
1377 : {
1378 : struct
1379 : {
1380 : Elf32_Word gt_current_g_value; /* -G value used for compilation */
1381 : Elf32_Word gt_unused; /* Not used */
1382 : } gt_header; /* First entry in section */
1383 : struct
1384 : {
1385 : Elf32_Word gt_g_value; /* If this value were used for -G */
1386 : Elf32_Word gt_bytes; /* This many bytes would be used */
1387 : } gt_entry; /* Subsequent entries in section */
1388 : } Elf32_gptab;
1389 :
1390 : /* Entry found in sections of type SHT_MIPS_REGINFO. */
1391 :
1392 : typedef struct
1393 : {
1394 : Elf32_Word ri_gprmask; /* General registers used */
1395 : Elf32_Word ri_cprmask[4]; /* Coprocessor registers used */
1396 : Elf32_Sword ri_gp_value; /* $gp register value */
1397 : } Elf32_RegInfo;
1398 :
1399 : /* Entries found in sections of type SHT_MIPS_OPTIONS. */
1400 :
1401 : typedef struct
1402 : {
1403 : unsigned char kind; /* Determines interpretation of the
1404 : variable part of descriptor. */
1405 : unsigned char size; /* Size of descriptor, including header. */
1406 : Elf32_Section section; /* Section header index of section affected,
1407 : 0 for global options. */
1408 : Elf32_Word info; /* Kind-specific information. */
1409 : } Elf_Options;
1410 :
1411 : /* Values for `kind' field in Elf_Options. */
1412 :
1413 : #define ODK_NULL 0 /* Undefined. */
1414 : #define ODK_REGINFO 1 /* Register usage information. */
1415 : #define ODK_EXCEPTIONS 2 /* Exception processing options. */
1416 : #define ODK_PAD 3 /* Section padding options. */
1417 : #define ODK_HWPATCH 4 /* Hardware workarounds performed */
1418 : #define ODK_FILL 5 /* record the fill value used by the linker. */
1419 : #define ODK_TAGS 6 /* reserve space for desktop tools to write. */
1420 : #define ODK_HWAND 7 /* HW workarounds. 'AND' bits when merging. */
1421 : #define ODK_HWOR 8 /* HW workarounds. 'OR' bits when merging. */
1422 :
1423 : /* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries. */
1424 :
1425 : #define OEX_FPU_MIN 0x1f /* FPE's which MUST be enabled. */
1426 : #define OEX_FPU_MAX 0x1f00 /* FPE's which MAY be enabled. */
1427 : #define OEX_PAGE0 0x10000 /* page zero must be mapped. */
1428 : #define OEX_SMM 0x20000 /* Force sequential memory mode? */
1429 : #define OEX_FPDBUG 0x40000 /* Force floating point debug mode? */
1430 : #define OEX_PRECISEFP OEX_FPDBUG
1431 : #define OEX_DISMISS 0x80000 /* Dismiss invalid address faults? */
1432 :
1433 : #define OEX_FPU_INVAL 0x10
1434 : #define OEX_FPU_DIV0 0x08
1435 : #define OEX_FPU_OFLO 0x04
1436 : #define OEX_FPU_UFLO 0x02
1437 : #define OEX_FPU_INEX 0x01
1438 :
1439 : /* Masks for `info' in Elf_Options for an ODK_HWPATCH entry. */
1440 :
1441 : #define OHW_R4KEOP 0x1 /* R4000 end-of-page patch. */
1442 : #define OHW_R8KPFETCH 0x2 /* may need R8000 prefetch patch. */
1443 : #define OHW_R5KEOP 0x4 /* R5000 end-of-page patch. */
1444 : #define OHW_R5KCVTL 0x8 /* R5000 cvt.[ds].l bug. clean=1. */
1445 :
1446 : #define OPAD_PREFIX 0x1
1447 : #define OPAD_POSTFIX 0x2
1448 : #define OPAD_SYMBOL 0x4
1449 :
1450 : /* Entry found in `.options' section. */
1451 :
1452 : typedef struct
1453 : {
1454 : Elf32_Word hwp_flags1; /* Extra flags. */
1455 : Elf32_Word hwp_flags2; /* Extra flags. */
1456 : } Elf_Options_Hw;
1457 :
1458 : /* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries. */
1459 :
1460 : #define OHWA0_R4KEOP_CHECKED 0x00000001
1461 : #define OHWA1_R4KEOP_CLEAN 0x00000002
1462 :
1463 : /* MIPS relocs. */
1464 :
1465 : #define R_MIPS_NONE 0 /* No reloc */
1466 : #define R_MIPS_16 1 /* Direct 16 bit */
1467 : #define R_MIPS_32 2 /* Direct 32 bit */
1468 : #define R_MIPS_REL32 3 /* PC relative 32 bit */
1469 : #define R_MIPS_26 4 /* Direct 26 bit shifted */
1470 : #define R_MIPS_HI16 5 /* High 16 bit */
1471 : #define R_MIPS_LO16 6 /* Low 16 bit */
1472 : #define R_MIPS_GPREL16 7 /* GP relative 16 bit */
1473 : #define R_MIPS_LITERAL 8 /* 16 bit literal entry */
1474 : #define R_MIPS_GOT16 9 /* 16 bit GOT entry */
1475 : #define R_MIPS_PC16 10 /* PC relative 16 bit */
1476 : #define R_MIPS_CALL16 11 /* 16 bit GOT entry for function */
1477 : #define R_MIPS_GPREL32 12 /* GP relative 32 bit */
1478 :
1479 : #define R_MIPS_SHIFT5 16
1480 : #define R_MIPS_SHIFT6 17
1481 : #define R_MIPS_64 18
1482 : #define R_MIPS_GOT_DISP 19
1483 : #define R_MIPS_GOT_PAGE 20
1484 : #define R_MIPS_GOT_OFST 21
1485 : #define R_MIPS_GOT_HI16 22
1486 : #define R_MIPS_GOT_LO16 23
1487 : #define R_MIPS_SUB 24
1488 : #define R_MIPS_INSERT_A 25
1489 : #define R_MIPS_INSERT_B 26
1490 : #define R_MIPS_DELETE 27
1491 : #define R_MIPS_HIGHER 28
1492 : #define R_MIPS_HIGHEST 29
1493 : #define R_MIPS_CALL_HI16 30
1494 : #define R_MIPS_CALL_LO16 31
1495 : #define R_MIPS_SCN_DISP 32
1496 : #define R_MIPS_REL16 33
1497 : #define R_MIPS_ADD_IMMEDIATE 34
1498 : #define R_MIPS_PJUMP 35
1499 : #define R_MIPS_RELGOT 36
1500 : #define R_MIPS_JALR 37
1501 : #define R_MIPS_TLS_DTPMOD32 38 /* Module number 32 bit */
1502 : #define R_MIPS_TLS_DTPREL32 39 /* Module-relative offset 32 bit */
1503 : #define R_MIPS_TLS_DTPMOD64 40 /* Module number 64 bit */
1504 : #define R_MIPS_TLS_DTPREL64 41 /* Module-relative offset 64 bit */
1505 : #define R_MIPS_TLS_GD 42 /* 16 bit GOT offset for GD */
1506 : #define R_MIPS_TLS_LDM 43 /* 16 bit GOT offset for LDM */
1507 : #define R_MIPS_TLS_DTPREL_HI16 44 /* Module-relative offset, high 16 bits */
1508 : #define R_MIPS_TLS_DTPREL_LO16 45 /* Module-relative offset, low 16 bits */
1509 : #define R_MIPS_TLS_GOTTPREL 46 /* 16 bit GOT offset for IE */
1510 : #define R_MIPS_TLS_TPREL32 47 /* TP-relative offset, 32 bit */
1511 : #define R_MIPS_TLS_TPREL64 48 /* TP-relative offset, 64 bit */
1512 : #define R_MIPS_TLS_TPREL_HI16 49 /* TP-relative offset, high 16 bits */
1513 : #define R_MIPS_TLS_TPREL_LO16 50 /* TP-relative offset, low 16 bits */
1514 : /* Keep this the last entry. */
1515 : #define R_MIPS_NUM 51
1516 :
1517 : /* Legal values for p_type field of Elf32_Phdr. */
1518 :
1519 : #define PT_MIPS_REGINFO 0x70000000 /* Register usage information */
1520 : #define PT_MIPS_RTPROC 0x70000001 /* Runtime procedure table. */
1521 : #define PT_MIPS_OPTIONS 0x70000002
1522 :
1523 : /* Special program header types. */
1524 :
1525 : #define PF_MIPS_LOCAL 0x10000000
1526 :
1527 : /* Legal values for d_tag field of Elf32_Dyn. */
1528 :
1529 : #define DT_MIPS_RLD_VERSION 0x70000001 /* Runtime linker interface version */
1530 : #define DT_MIPS_TIME_STAMP 0x70000002 /* Timestamp */
1531 : #define DT_MIPS_ICHECKSUM 0x70000003 /* Checksum */
1532 : #define DT_MIPS_IVERSION 0x70000004 /* Version string (string tbl index) */
1533 : #define DT_MIPS_FLAGS 0x70000005 /* Flags */
1534 : #define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */
1535 : #define DT_MIPS_MSYM 0x70000007
1536 : #define DT_MIPS_CONFLICT 0x70000008 /* Address of CONFLICT section */
1537 : #define DT_MIPS_LIBLIST 0x70000009 /* Address of LIBLIST section */
1538 : #define DT_MIPS_LOCAL_GOTNO 0x7000000a /* Number of local GOT entries */
1539 : #define DT_MIPS_CONFLICTNO 0x7000000b /* Number of CONFLICT entries */
1540 : #define DT_MIPS_LIBLISTNO 0x70000010 /* Number of LIBLIST entries */
1541 : #define DT_MIPS_SYMTABNO 0x70000011 /* Number of DYNSYM entries */
1542 : #define DT_MIPS_UNREFEXTNO 0x70000012 /* First external DYNSYM */
1543 : #define DT_MIPS_GOTSYM 0x70000013 /* First GOT entry in DYNSYM */
1544 : #define DT_MIPS_HIPAGENO 0x70000014 /* Number of GOT page table entries */
1545 : #define DT_MIPS_RLD_MAP 0x70000016 /* Address of run time loader map. */
1546 : #define DT_MIPS_DELTA_CLASS 0x70000017 /* Delta C++ class definition. */
1547 : #define DT_MIPS_DELTA_CLASS_NO 0x70000018 /* Number of entries in
1548 : DT_MIPS_DELTA_CLASS. */
1549 : #define DT_MIPS_DELTA_INSTANCE 0x70000019 /* Delta C++ class instances. */
1550 : #define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
1551 : DT_MIPS_DELTA_INSTANCE. */
1552 : #define DT_MIPS_DELTA_RELOC 0x7000001b /* Delta relocations. */
1553 : #define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
1554 : DT_MIPS_DELTA_RELOC. */
1555 : #define DT_MIPS_DELTA_SYM 0x7000001d /* Delta symbols that Delta
1556 : relocations refer to. */
1557 : #define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
1558 : DT_MIPS_DELTA_SYM. */
1559 : #define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
1560 : class declaration. */
1561 : #define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
1562 : DT_MIPS_DELTA_CLASSSYM. */
1563 : #define DT_MIPS_CXX_FLAGS 0x70000022 /* Flags indicating for C++ flavor. */
1564 : #define DT_MIPS_PIXIE_INIT 0x70000023
1565 : #define DT_MIPS_SYMBOL_LIB 0x70000024
1566 : #define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
1567 : #define DT_MIPS_LOCAL_GOTIDX 0x70000026
1568 : #define DT_MIPS_HIDDEN_GOTIDX 0x70000027
1569 : #define DT_MIPS_PROTECTED_GOTIDX 0x70000028
1570 : #define DT_MIPS_OPTIONS 0x70000029 /* Address of .options. */
1571 : #define DT_MIPS_INTERFACE 0x7000002a /* Address of .interface. */
1572 : #define DT_MIPS_DYNSTR_ALIGN 0x7000002b
1573 : #define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
1574 : #define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
1575 : function stored in GOT. */
1576 : #define DT_MIPS_PERF_SUFFIX 0x7000002e /* Default suffix of dso to be added
1577 : by rld on dlopen() calls. */
1578 : #define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
1579 : #define DT_MIPS_GP_VALUE 0x70000030 /* GP value for aux GOTs. */
1580 : #define DT_MIPS_AUX_DYNAMIC 0x70000031 /* Address of aux .dynamic. */
1581 : #define DT_MIPS_NUM 0x32
1582 :
1583 : /* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry. */
1584 :
1585 : #define RHF_NONE 0 /* No flags */
1586 : #define RHF_QUICKSTART (1 << 0) /* Use quickstart */
1587 : #define RHF_NOTPOT (1 << 1) /* Hash size not power of 2 */
1588 : #define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) /* Ignore LD_LIBRARY_PATH */
1589 : #define RHF_NO_MOVE (1 << 3)
1590 : #define RHF_SGI_ONLY (1 << 4)
1591 : #define RHF_GUARANTEE_INIT (1 << 5)
1592 : #define RHF_DELTA_C_PLUS_PLUS (1 << 6)
1593 : #define RHF_GUARANTEE_START_INIT (1 << 7)
1594 : #define RHF_PIXIE (1 << 8)
1595 : #define RHF_DEFAULT_DELAY_LOAD (1 << 9)
1596 : #define RHF_REQUICKSTART (1 << 10)
1597 : #define RHF_REQUICKSTARTED (1 << 11)
1598 : #define RHF_CORD (1 << 12)
1599 : #define RHF_NO_UNRES_UNDEF (1 << 13)
1600 : #define RHF_RLD_ORDER_SAFE (1 << 14)
1601 :
1602 : /* Entries found in sections of type SHT_MIPS_LIBLIST. */
1603 :
1604 : typedef struct
1605 : {
1606 : Elf32_Word l_name; /* Name (string table index) */
1607 : Elf32_Word l_time_stamp; /* Timestamp */
1608 : Elf32_Word l_checksum; /* Checksum */
1609 : Elf32_Word l_version; /* Interface version */
1610 : Elf32_Word l_flags; /* Flags */
1611 : } Elf32_Lib;
1612 :
1613 : typedef struct
1614 : {
1615 : Elf64_Word l_name; /* Name (string table index) */
1616 : Elf64_Word l_time_stamp; /* Timestamp */
1617 : Elf64_Word l_checksum; /* Checksum */
1618 : Elf64_Word l_version; /* Interface version */
1619 : Elf64_Word l_flags; /* Flags */
1620 : } Elf64_Lib;
1621 :
1622 :
1623 : /* Legal values for l_flags. */
1624 :
1625 : #define LL_NONE 0
1626 : #define LL_EXACT_MATCH (1 << 0) /* Require exact match */
1627 : #define LL_IGNORE_INT_VER (1 << 1) /* Ignore interface version */
1628 : #define LL_REQUIRE_MINOR (1 << 2)
1629 : #define LL_EXPORTS (1 << 3)
1630 : #define LL_DELAY_LOAD (1 << 4)
1631 : #define LL_DELTA (1 << 5)
1632 :
1633 : /* Entries found in sections of type SHT_MIPS_CONFLICT. */
1634 :
1635 : typedef Elf32_Addr Elf32_Conflict;
1636 :
1637 :
1638 : /* HPPA specific definitions. */
1639 :
1640 : /* Legal values for e_flags field of Elf32_Ehdr. */
1641 :
1642 : #define EF_PARISC_TRAPNIL 0x00010000 /* Trap nil pointer dereference. */
1643 : #define EF_PARISC_EXT 0x00020000 /* Program uses arch. extensions. */
1644 : #define EF_PARISC_LSB 0x00040000 /* Program expects little endian. */
1645 : #define EF_PARISC_WIDE 0x00080000 /* Program expects wide mode. */
1646 : #define EF_PARISC_NO_KABP 0x00100000 /* No kernel assisted branch
1647 : prediction. */
1648 : #define EF_PARISC_LAZYSWAP 0x00400000 /* Allow lazy swapping. */
1649 : #define EF_PARISC_ARCH 0x0000ffff /* Architecture version. */
1650 :
1651 : /* Defined values for `e_flags & EF_PARISC_ARCH' are: */
1652 :
1653 : #define EFA_PARISC_1_0 0x020b /* PA-RISC 1.0 big-endian. */
1654 : #define EFA_PARISC_1_1 0x0210 /* PA-RISC 1.1 big-endian. */
1655 : #define EFA_PARISC_2_0 0x0214 /* PA-RISC 2.0 big-endian. */
1656 :
1657 : /* Additional section indeces. */
1658 :
1659 : #define SHN_PARISC_ANSI_COMMON 0xff00 /* Section for tenatively declared
1660 : symbols in ANSI C. */
1661 : #define SHN_PARISC_HUGE_COMMON 0xff01 /* Common blocks in huge model. */
1662 :
1663 : /* Legal values for sh_type field of Elf32_Shdr. */
1664 :
1665 : #define SHT_PARISC_EXT 0x70000000 /* Contains product specific ext. */
1666 : #define SHT_PARISC_UNWIND 0x70000001 /* Unwind information. */
1667 : #define SHT_PARISC_DOC 0x70000002 /* Debug info for optimized code. */
1668 :
1669 : /* Legal values for sh_flags field of Elf32_Shdr. */
1670 :
1671 : #define SHF_PARISC_SHORT 0x20000000 /* Section with short addressing. */
1672 : #define SHF_PARISC_HUGE 0x40000000 /* Section far from gp. */
1673 : #define SHF_PARISC_SBP 0x80000000 /* Static branch prediction code. */
1674 :
1675 : /* Legal values for ST_TYPE subfield of st_info (symbol type). */
1676 :
1677 : #define STT_PARISC_MILLICODE 13 /* Millicode function entry point. */
1678 :
1679 : #define STT_HP_OPAQUE (STT_LOOS + 0x1)
1680 : #define STT_HP_STUB (STT_LOOS + 0x2)
1681 :
1682 : /* HPPA relocs. */
1683 :
1684 : #define R_PARISC_NONE 0 /* No reloc. */
1685 : #define R_PARISC_DIR32 1 /* Direct 32-bit reference. */
1686 : #define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */
1687 : #define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */
1688 : #define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */
1689 : #define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */
1690 : #define R_PARISC_PCREL32 9 /* 32-bit rel. address. */
1691 : #define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */
1692 : #define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */
1693 : #define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */
1694 : #define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */
1695 : #define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */
1696 : #define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */
1697 : #define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */
1698 : #define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */
1699 : #define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */
1700 : #define R_PARISC_LTOFF14R 38 /* LT-relative, right 14 bits. */
1701 : #define R_PARISC_SECREL32 41 /* 32 bits section rel. address. */
1702 : #define R_PARISC_SEGBASE 48 /* No relocation, set segment base. */
1703 : #define R_PARISC_SEGREL32 49 /* 32 bits segment rel. address. */
1704 : #define R_PARISC_PLTOFF21L 50 /* PLT rel. address, left 21 bits. */
1705 : #define R_PARISC_PLTOFF14R 54 /* PLT rel. address, right 14 bits. */
1706 : #define R_PARISC_LTOFF_FPTR32 57 /* 32 bits LT-rel. function pointer. */
1707 : #define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */
1708 : #define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */
1709 : #define R_PARISC_FPTR64 64 /* 64 bits function address. */
1710 : #define R_PARISC_PLABEL32 65 /* 32 bits function address. */
1711 : #define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */
1712 : #define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */
1713 : #define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */
1714 : #define R_PARISC_PCREL14DR 76 /* PC rel. address, right 14 bits. */
1715 : #define R_PARISC_PCREL16F 77 /* 16 bits PC-rel. address. */
1716 : #define R_PARISC_PCREL16WF 78 /* 16 bits PC-rel. address. */
1717 : #define R_PARISC_PCREL16DF 79 /* 16 bits PC-rel. address. */
1718 : #define R_PARISC_DIR64 80 /* 64 bits of eff. address. */
1719 : #define R_PARISC_DIR14WR 83 /* 14 bits of eff. address. */
1720 : #define R_PARISC_DIR14DR 84 /* 14 bits of eff. address. */
1721 : #define R_PARISC_DIR16F 85 /* 16 bits of eff. address. */
1722 : #define R_PARISC_DIR16WF 86 /* 16 bits of eff. address. */
1723 : #define R_PARISC_DIR16DF 87 /* 16 bits of eff. address. */
1724 : #define R_PARISC_GPREL64 88 /* 64 bits of GP-rel. address. */
1725 : #define R_PARISC_GPREL14WR 91 /* GP-rel. address, right 14 bits. */
1726 : #define R_PARISC_GPREL14DR 92 /* GP-rel. address, right 14 bits. */
1727 : #define R_PARISC_GPREL16F 93 /* 16 bits GP-rel. address. */
1728 : #define R_PARISC_GPREL16WF 94 /* 16 bits GP-rel. address. */
1729 : #define R_PARISC_GPREL16DF 95 /* 16 bits GP-rel. address. */
1730 : #define R_PARISC_LTOFF64 96 /* 64 bits LT-rel. address. */
1731 : #define R_PARISC_LTOFF14WR 99 /* LT-rel. address, right 14 bits. */
1732 : #define R_PARISC_LTOFF14DR 100 /* LT-rel. address, right 14 bits. */
1733 : #define R_PARISC_LTOFF16F 101 /* 16 bits LT-rel. address. */
1734 : #define R_PARISC_LTOFF16WF 102 /* 16 bits LT-rel. address. */
1735 : #define R_PARISC_LTOFF16DF 103 /* 16 bits LT-rel. address. */
1736 : #define R_PARISC_SECREL64 104 /* 64 bits section rel. address. */
1737 : #define R_PARISC_SEGREL64 112 /* 64 bits segment rel. address. */
1738 : #define R_PARISC_PLTOFF14WR 115 /* PLT-rel. address, right 14 bits. */
1739 : #define R_PARISC_PLTOFF14DR 116 /* PLT-rel. address, right 14 bits. */
1740 : #define R_PARISC_PLTOFF16F 117 /* 16 bits LT-rel. address. */
1741 : #define R_PARISC_PLTOFF16WF 118 /* 16 bits PLT-rel. address. */
1742 : #define R_PARISC_PLTOFF16DF 119 /* 16 bits PLT-rel. address. */
1743 : #define R_PARISC_LTOFF_FPTR64 120 /* 64 bits LT-rel. function ptr. */
1744 : #define R_PARISC_LTOFF_FPTR14WR 123 /* LT-rel. fct. ptr., right 14 bits. */
1745 : #define R_PARISC_LTOFF_FPTR14DR 124 /* LT-rel. fct. ptr., right 14 bits. */
1746 : #define R_PARISC_LTOFF_FPTR16F 125 /* 16 bits LT-rel. function ptr. */
1747 : #define R_PARISC_LTOFF_FPTR16WF 126 /* 16 bits LT-rel. function ptr. */
1748 : #define R_PARISC_LTOFF_FPTR16DF 127 /* 16 bits LT-rel. function ptr. */
1749 : #define R_PARISC_LORESERVE 128
1750 : #define R_PARISC_COPY 128 /* Copy relocation. */
1751 : #define R_PARISC_IPLT 129 /* Dynamic reloc, imported PLT */
1752 : #define R_PARISC_EPLT 130 /* Dynamic reloc, exported PLT */
1753 : #define R_PARISC_TPREL32 153 /* 32 bits TP-rel. address. */
1754 : #define R_PARISC_TPREL21L 154 /* TP-rel. address, left 21 bits. */
1755 : #define R_PARISC_TPREL14R 158 /* TP-rel. address, right 14 bits. */
1756 : #define R_PARISC_LTOFF_TP21L 162 /* LT-TP-rel. address, left 21 bits. */
1757 : #define R_PARISC_LTOFF_TP14R 166 /* LT-TP-rel. address, right 14 bits.*/
1758 : #define R_PARISC_LTOFF_TP14F 167 /* 14 bits LT-TP-rel. address. */
1759 : #define R_PARISC_TPREL64 216 /* 64 bits TP-rel. address. */
1760 : #define R_PARISC_TPREL14WR 219 /* TP-rel. address, right 14 bits. */
1761 : #define R_PARISC_TPREL14DR 220 /* TP-rel. address, right 14 bits. */
1762 : #define R_PARISC_TPREL16F 221 /* 16 bits TP-rel. address. */
1763 : #define R_PARISC_TPREL16WF 222 /* 16 bits TP-rel. address. */
1764 : #define R_PARISC_TPREL16DF 223 /* 16 bits TP-rel. address. */
1765 : #define R_PARISC_LTOFF_TP64 224 /* 64 bits LT-TP-rel. address. */
1766 : #define R_PARISC_LTOFF_TP14WR 227 /* LT-TP-rel. address, right 14 bits.*/
1767 : #define R_PARISC_LTOFF_TP14DR 228 /* LT-TP-rel. address, right 14 bits.*/
1768 : #define R_PARISC_LTOFF_TP16F 229 /* 16 bits LT-TP-rel. address. */
1769 : #define R_PARISC_LTOFF_TP16WF 230 /* 16 bits LT-TP-rel. address. */
1770 : #define R_PARISC_LTOFF_TP16DF 231 /* 16 bits LT-TP-rel. address. */
1771 : #define R_PARISC_HIRESERVE 255
1772 :
1773 : /* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */
1774 :
1775 : #define PT_HP_TLS (PT_LOOS + 0x0)
1776 : #define PT_HP_CORE_NONE (PT_LOOS + 0x1)
1777 : #define PT_HP_CORE_VERSION (PT_LOOS + 0x2)
1778 : #define PT_HP_CORE_KERNEL (PT_LOOS + 0x3)
1779 : #define PT_HP_CORE_COMM (PT_LOOS + 0x4)
1780 : #define PT_HP_CORE_PROC (PT_LOOS + 0x5)
1781 : #define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6)
1782 : #define PT_HP_CORE_STACK (PT_LOOS + 0x7)
1783 : #define PT_HP_CORE_SHM (PT_LOOS + 0x8)
1784 : #define PT_HP_CORE_MMF (PT_LOOS + 0x9)
1785 : #define PT_HP_PARALLEL (PT_LOOS + 0x10)
1786 : #define PT_HP_FASTBIND (PT_LOOS + 0x11)
1787 : #define PT_HP_OPT_ANNOT (PT_LOOS + 0x12)
1788 : #define PT_HP_HSL_ANNOT (PT_LOOS + 0x13)
1789 : #define PT_HP_STACK (PT_LOOS + 0x14)
1790 :
1791 : #define PT_PARISC_ARCHEXT 0x70000000
1792 : #define PT_PARISC_UNWIND 0x70000001
1793 :
1794 : /* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr. */
1795 :
1796 : #define PF_PARISC_SBP 0x08000000
1797 :
1798 : #define PF_HP_PAGE_SIZE 0x00100000
1799 : #define PF_HP_FAR_SHARED 0x00200000
1800 : #define PF_HP_NEAR_SHARED 0x00400000
1801 : #define PF_HP_CODE 0x01000000
1802 : #define PF_HP_MODIFY 0x02000000
1803 : #define PF_HP_LAZYSWAP 0x04000000
1804 : #define PF_HP_SBP 0x08000000
1805 :
1806 :
1807 : /* Alpha specific definitions. */
1808 :
1809 : /* Legal values for e_flags field of Elf64_Ehdr. */
1810 :
1811 : #define EF_ALPHA_32BIT 1 /* All addresses must be < 2GB. */
1812 : #define EF_ALPHA_CANRELAX 2 /* Relocations for relaxing exist. */
1813 :
1814 : /* Legal values for sh_type field of Elf64_Shdr. */
1815 :
1816 : /* These two are primerily concerned with ECOFF debugging info. */
1817 : #define SHT_ALPHA_DEBUG 0x70000001
1818 : #define SHT_ALPHA_REGINFO 0x70000002
1819 :
1820 : /* Legal values for sh_flags field of Elf64_Shdr. */
1821 :
1822 : #define SHF_ALPHA_GPREL 0x10000000
1823 :
1824 : /* Legal values for st_other field of Elf64_Sym. */
1825 : #define STO_ALPHA_NOPV 0x80 /* No PV required. */
1826 : #define STO_ALPHA_STD_GPLOAD 0x88 /* PV only used for initial ldgp. */
1827 :
1828 : /* Alpha relocs. */
1829 :
1830 : #define R_ALPHA_NONE 0 /* No reloc */
1831 : #define R_ALPHA_REFLONG 1 /* Direct 32 bit */
1832 : #define R_ALPHA_REFQUAD 2 /* Direct 64 bit */
1833 : #define R_ALPHA_GPREL32 3 /* GP relative 32 bit */
1834 : #define R_ALPHA_LITERAL 4 /* GP relative 16 bit w/optimization */
1835 : #define R_ALPHA_LITUSE 5 /* Optimization hint for LITERAL */
1836 : #define R_ALPHA_GPDISP 6 /* Add displacement to GP */
1837 : #define R_ALPHA_BRADDR 7 /* PC+4 relative 23 bit shifted */
1838 : #define R_ALPHA_HINT 8 /* PC+4 relative 16 bit shifted */
1839 : #define R_ALPHA_SREL16 9 /* PC relative 16 bit */
1840 : #define R_ALPHA_SREL32 10 /* PC relative 32 bit */
1841 : #define R_ALPHA_SREL64 11 /* PC relative 64 bit */
1842 : #define R_ALPHA_GPRELHIGH 17 /* GP relative 32 bit, high 16 bits */
1843 : #define R_ALPHA_GPRELLOW 18 /* GP relative 32 bit, low 16 bits */
1844 : #define R_ALPHA_GPREL16 19 /* GP relative 16 bit */
1845 : #define R_ALPHA_COPY 24 /* Copy symbol at runtime */
1846 : #define R_ALPHA_GLOB_DAT 25 /* Create GOT entry */
1847 : #define R_ALPHA_JMP_SLOT 26 /* Create PLT entry */
1848 : #define R_ALPHA_RELATIVE 27 /* Adjust by program base */
1849 : #define R_ALPHA_TLS_GD_HI 28
1850 : #define R_ALPHA_TLSGD 29
1851 : #define R_ALPHA_TLS_LDM 30
1852 : #define R_ALPHA_DTPMOD64 31
1853 : #define R_ALPHA_GOTDTPREL 32
1854 : #define R_ALPHA_DTPREL64 33
1855 : #define R_ALPHA_DTPRELHI 34
1856 : #define R_ALPHA_DTPRELLO 35
1857 : #define R_ALPHA_DTPREL16 36
1858 : #define R_ALPHA_GOTTPREL 37
1859 : #define R_ALPHA_TPREL64 38
1860 : #define R_ALPHA_TPRELHI 39
1861 : #define R_ALPHA_TPRELLO 40
1862 : #define R_ALPHA_TPREL16 41
1863 : /* Keep this the last entry. */
1864 : #define R_ALPHA_NUM 46
1865 :
1866 : /* Magic values of the LITUSE relocation addend. */
1867 : #define LITUSE_ALPHA_ADDR 0
1868 : #define LITUSE_ALPHA_BASE 1
1869 : #define LITUSE_ALPHA_BYTOFF 2
1870 : #define LITUSE_ALPHA_JSR 3
1871 : #define LITUSE_ALPHA_TLS_GD 4
1872 : #define LITUSE_ALPHA_TLS_LDM 5
1873 :
1874 : /* Legal values for d_tag of Elf64_Dyn. */
1875 : #define DT_ALPHA_PLTRO (DT_LOPROC + 0)
1876 : #define DT_ALPHA_NUM 1
1877 :
1878 : /* PowerPC specific declarations */
1879 :
1880 : /* Values for Elf32/64_Ehdr.e_flags. */
1881 : #define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */
1882 :
1883 : /* Cygnus local bits below */
1884 : #define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/
1885 : #define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib
1886 : flag */
1887 :
1888 : /* PowerPC relocations defined by the ABIs */
1889 : #define R_PPC_NONE 0
1890 : #define R_PPC_ADDR32 1 /* 32bit absolute address */
1891 : #define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */
1892 : #define R_PPC_ADDR16 3 /* 16bit absolute address */
1893 : #define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */
1894 : #define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */
1895 : #define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */
1896 : #define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */
1897 : #define R_PPC_ADDR14_BRTAKEN 8
1898 : #define R_PPC_ADDR14_BRNTAKEN 9
1899 : #define R_PPC_REL24 10 /* PC relative 26 bit */
1900 : #define R_PPC_REL14 11 /* PC relative 16 bit */
1901 : #define R_PPC_REL14_BRTAKEN 12
1902 : #define R_PPC_REL14_BRNTAKEN 13
1903 : #define R_PPC_GOT16 14
1904 : #define R_PPC_GOT16_LO 15
1905 : #define R_PPC_GOT16_HI 16
1906 : #define R_PPC_GOT16_HA 17
1907 : #define R_PPC_PLTREL24 18
1908 : #define R_PPC_COPY 19
1909 : #define R_PPC_GLOB_DAT 20
1910 : #define R_PPC_JMP_SLOT 21
1911 : #define R_PPC_RELATIVE 22
1912 : #define R_PPC_LOCAL24PC 23
1913 : #define R_PPC_UADDR32 24
1914 : #define R_PPC_UADDR16 25
1915 : #define R_PPC_REL32 26
1916 : #define R_PPC_PLT32 27
1917 : #define R_PPC_PLTREL32 28
1918 : #define R_PPC_PLT16_LO 29
1919 : #define R_PPC_PLT16_HI 30
1920 : #define R_PPC_PLT16_HA 31
1921 : #define R_PPC_SDAREL16 32
1922 : #define R_PPC_SECTOFF 33
1923 : #define R_PPC_SECTOFF_LO 34
1924 : #define R_PPC_SECTOFF_HI 35
1925 : #define R_PPC_SECTOFF_HA 36
1926 :
1927 : /* PowerPC relocations defined for the TLS access ABI. */
1928 : #define R_PPC_TLS 67 /* none (sym+add)@tls */
1929 : #define R_PPC_DTPMOD32 68 /* word32 (sym+add)@dtpmod */
1930 : #define R_PPC_TPREL16 69 /* half16* (sym+add)@tprel */
1931 : #define R_PPC_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */
1932 : #define R_PPC_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */
1933 : #define R_PPC_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */
1934 : #define R_PPC_TPREL32 73 /* word32 (sym+add)@tprel */
1935 : #define R_PPC_DTPREL16 74 /* half16* (sym+add)@dtprel */
1936 : #define R_PPC_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */
1937 : #define R_PPC_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */
1938 : #define R_PPC_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */
1939 : #define R_PPC_DTPREL32 78 /* word32 (sym+add)@dtprel */
1940 : #define R_PPC_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */
1941 : #define R_PPC_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */
1942 : #define R_PPC_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */
1943 : #define R_PPC_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */
1944 : #define R_PPC_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */
1945 : #define R_PPC_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */
1946 : #define R_PPC_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */
1947 : #define R_PPC_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */
1948 : #define R_PPC_GOT_TPREL16 87 /* half16* (sym+add)@got@tprel */
1949 : #define R_PPC_GOT_TPREL16_LO 88 /* half16 (sym+add)@got@tprel@l */
1950 : #define R_PPC_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */
1951 : #define R_PPC_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */
1952 : #define R_PPC_GOT_DTPREL16 91 /* half16* (sym+add)@got@dtprel */
1953 : #define R_PPC_GOT_DTPREL16_LO 92 /* half16* (sym+add)@got@dtprel@l */
1954 : #define R_PPC_GOT_DTPREL16_HI 93 /* half16* (sym+add)@got@dtprel@h */
1955 : #define R_PPC_GOT_DTPREL16_HA 94 /* half16* (sym+add)@got@dtprel@ha */
1956 :
1957 : /* Keep this the last entry. */
1958 : #define R_PPC_NUM 95
1959 :
1960 : /* The remaining relocs are from the Embedded ELF ABI, and are not
1961 : in the SVR4 ELF ABI. */
1962 : #define R_PPC_EMB_NADDR32 101
1963 : #define R_PPC_EMB_NADDR16 102
1964 : #define R_PPC_EMB_NADDR16_LO 103
1965 : #define R_PPC_EMB_NADDR16_HI 104
1966 : #define R_PPC_EMB_NADDR16_HA 105
1967 : #define R_PPC_EMB_SDAI16 106
1968 : #define R_PPC_EMB_SDA2I16 107
1969 : #define R_PPC_EMB_SDA2REL 108
1970 : #define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */
1971 : #define R_PPC_EMB_MRKREF 110
1972 : #define R_PPC_EMB_RELSEC16 111
1973 : #define R_PPC_EMB_RELST_LO 112
1974 : #define R_PPC_EMB_RELST_HI 113
1975 : #define R_PPC_EMB_RELST_HA 114
1976 : #define R_PPC_EMB_BIT_FLD 115
1977 : #define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */
1978 :
1979 : /* Diab tool relocations. */
1980 : #define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */
1981 : #define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */
1982 : #define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */
1983 : #define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */
1984 : #define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */
1985 : #define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */
1986 :
1987 : /* GNU relocs used in PIC code sequences. */
1988 : #define R_PPC_REL16 249 /* word32 (sym-.) */
1989 : #define R_PPC_REL16_LO 250 /* half16 (sym-.)@l */
1990 : #define R_PPC_REL16_HI 251 /* half16 (sym-.)@h */
1991 : #define R_PPC_REL16_HA 252 /* half16 (sym-.)@ha */
1992 :
1993 : /* This is a phony reloc to handle any old fashioned TOC16 references
1994 : that may still be in object files. */
1995 : #define R_PPC_TOC16 255
1996 :
1997 : /* PowerPC specific values for the Dyn d_tag field. */
1998 : #define DT_PPC_GOT (DT_LOPROC + 0)
1999 : #define DT_PPC_NUM 1
2000 :
2001 : /* PowerPC64 relocations defined by the ABIs */
2002 : #define R_PPC64_NONE R_PPC_NONE
2003 : #define R_PPC64_ADDR32 R_PPC_ADDR32 /* 32bit absolute address */
2004 : #define R_PPC64_ADDR24 R_PPC_ADDR24 /* 26bit address, word aligned */
2005 : #define R_PPC64_ADDR16 R_PPC_ADDR16 /* 16bit absolute address */
2006 : #define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO /* lower 16bits of address */
2007 : #define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI /* high 16bits of address. */
2008 : #define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA /* adjusted high 16bits. */
2009 : #define R_PPC64_ADDR14 R_PPC_ADDR14 /* 16bit address, word aligned */
2010 : #define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN
2011 : #define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN
2012 : #define R_PPC64_REL24 R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
2013 : #define R_PPC64_REL14 R_PPC_REL14 /* PC relative 16 bit */
2014 : #define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN
2015 : #define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN
2016 : #define R_PPC64_GOT16 R_PPC_GOT16
2017 : #define R_PPC64_GOT16_LO R_PPC_GOT16_LO
2018 : #define R_PPC64_GOT16_HI R_PPC_GOT16_HI
2019 : #define R_PPC64_GOT16_HA R_PPC_GOT16_HA
2020 :
2021 : #define R_PPC64_COPY R_PPC_COPY
2022 : #define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT
2023 : #define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT
2024 : #define R_PPC64_RELATIVE R_PPC_RELATIVE
2025 :
2026 : #define R_PPC64_UADDR32 R_PPC_UADDR32
2027 : #define R_PPC64_UADDR16 R_PPC_UADDR16
2028 : #define R_PPC64_REL32 R_PPC_REL32
2029 : #define R_PPC64_PLT32 R_PPC_PLT32
2030 : #define R_PPC64_PLTREL32 R_PPC_PLTREL32
2031 : #define R_PPC64_PLT16_LO R_PPC_PLT16_LO
2032 : #define R_PPC64_PLT16_HI R_PPC_PLT16_HI
2033 : #define R_PPC64_PLT16_HA R_PPC_PLT16_HA
2034 :
2035 : #define R_PPC64_SECTOFF R_PPC_SECTOFF
2036 : #define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO
2037 : #define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI
2038 : #define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA
2039 : #define R_PPC64_ADDR30 37 /* word30 (S + A - P) >> 2 */
2040 : #define R_PPC64_ADDR64 38 /* doubleword64 S + A */
2041 : #define R_PPC64_ADDR16_HIGHER 39 /* half16 #higher(S + A) */
2042 : #define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A) */
2043 : #define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A) */
2044 : #define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A) */
2045 : #define R_PPC64_UADDR64 43 /* doubleword64 S + A */
2046 : #define R_PPC64_REL64 44 /* doubleword64 S + A - P */
2047 : #define R_PPC64_PLT64 45 /* doubleword64 L + A */
2048 : #define R_PPC64_PLTREL64 46 /* doubleword64 L + A - P */
2049 : #define R_PPC64_TOC16 47 /* half16* S + A - .TOC */
2050 : #define R_PPC64_TOC16_LO 48 /* half16 #lo(S + A - .TOC.) */
2051 : #define R_PPC64_TOC16_HI 49 /* half16 #hi(S + A - .TOC.) */
2052 : #define R_PPC64_TOC16_HA 50 /* half16 #ha(S + A - .TOC.) */
2053 : #define R_PPC64_TOC 51 /* doubleword64 .TOC */
2054 : #define R_PPC64_PLTGOT16 52 /* half16* M + A */
2055 : #define R_PPC64_PLTGOT16_LO 53 /* half16 #lo(M + A) */
2056 : #define R_PPC64_PLTGOT16_HI 54 /* half16 #hi(M + A) */
2057 : #define R_PPC64_PLTGOT16_HA 55 /* half16 #ha(M + A) */
2058 :
2059 : #define R_PPC64_ADDR16_DS 56 /* half16ds* (S + A) >> 2 */
2060 : #define R_PPC64_ADDR16_LO_DS 57 /* half16ds #lo(S + A) >> 2 */
2061 : #define R_PPC64_GOT16_DS 58 /* half16ds* (G + A) >> 2 */
2062 : #define R_PPC64_GOT16_LO_DS 59 /* half16ds #lo(G + A) >> 2 */
2063 : #define R_PPC64_PLT16_LO_DS 60 /* half16ds #lo(L + A) >> 2 */
2064 : #define R_PPC64_SECTOFF_DS 61 /* half16ds* (R + A) >> 2 */
2065 : #define R_PPC64_SECTOFF_LO_DS 62 /* half16ds #lo(R + A) >> 2 */
2066 : #define R_PPC64_TOC16_DS 63 /* half16ds* (S + A - .TOC.) >> 2 */
2067 : #define R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2 */
2068 : #define R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2 */
2069 : #define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2 */
2070 :
2071 : /* PowerPC64 relocations defined for the TLS access ABI. */
2072 : #define R_PPC64_TLS 67 /* none (sym+add)@tls */
2073 : #define R_PPC64_DTPMOD64 68 /* doubleword64 (sym+add)@dtpmod */
2074 : #define R_PPC64_TPREL16 69 /* half16* (sym+add)@tprel */
2075 : #define R_PPC64_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */
2076 : #define R_PPC64_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */
2077 : #define R_PPC64_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */
2078 : #define R_PPC64_TPREL64 73 /* doubleword64 (sym+add)@tprel */
2079 : #define R_PPC64_DTPREL16 74 /* half16* (sym+add)@dtprel */
2080 : #define R_PPC64_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */
2081 : #define R_PPC64_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */
2082 : #define R_PPC64_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */
2083 : #define R_PPC64_DTPREL64 78 /* doubleword64 (sym+add)@dtprel */
2084 : #define R_PPC64_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */
2085 : #define R_PPC64_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */
2086 : #define R_PPC64_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */
2087 : #define R_PPC64_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */
2088 : #define R_PPC64_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */
2089 : #define R_PPC64_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */
2090 : #define R_PPC64_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */
2091 : #define R_PPC64_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */
2092 : #define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel */
2093 : #define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
2094 : #define R_PPC64_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */
2095 : #define R_PPC64_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */
2096 : #define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel */
2097 : #define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
2098 : #define R_PPC64_GOT_DTPREL16_HI 93 /* half16 (sym+add)@got@dtprel@h */
2099 : #define R_PPC64_GOT_DTPREL16_HA 94 /* half16 (sym+add)@got@dtprel@ha */
2100 : #define R_PPC64_TPREL16_DS 95 /* half16ds* (sym+add)@tprel */
2101 : #define R_PPC64_TPREL16_LO_DS 96 /* half16ds (sym+add)@tprel@l */
2102 : #define R_PPC64_TPREL16_HIGHER 97 /* half16 (sym+add)@tprel@higher */
2103 : #define R_PPC64_TPREL16_HIGHERA 98 /* half16 (sym+add)@tprel@highera */
2104 : #define R_PPC64_TPREL16_HIGHEST 99 /* half16 (sym+add)@tprel@highest */
2105 : #define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta */
2106 : #define R_PPC64_DTPREL16_DS 101 /* half16ds* (sym+add)@dtprel */
2107 : #define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l */
2108 : #define R_PPC64_DTPREL16_HIGHER 103 /* half16 (sym+add)@dtprel@higher */
2109 : #define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */
2110 : #define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */
2111 : #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */
2112 :
2113 : /* Keep this the last entry. */
2114 : #define R_PPC64_NUM 107
2115 :
2116 : /* PowerPC64 specific values for the Dyn d_tag field. */
2117 : #define DT_PPC64_GLINK (DT_LOPROC + 0)
2118 : #define DT_PPC64_OPD (DT_LOPROC + 1)
2119 : #define DT_PPC64_OPDSZ (DT_LOPROC + 2)
2120 : #define DT_PPC64_NUM 3
2121 :
2122 :
2123 : /* ARM specific declarations */
2124 :
2125 : /* Processor specific flags for the ELF header e_flags field. */
2126 : #define EF_ARM_RELEXEC 0x01
2127 : #define EF_ARM_HASENTRY 0x02
2128 : #define EF_ARM_INTERWORK 0x04
2129 : #define EF_ARM_APCS_26 0x08
2130 : #define EF_ARM_APCS_FLOAT 0x10
2131 : #define EF_ARM_PIC 0x20
2132 : #define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use */
2133 : #define EF_ARM_NEW_ABI 0x80
2134 : #define EF_ARM_OLD_ABI 0x100
2135 :
2136 : /* Other constants defined in the ARM ELF spec. version B-01. */
2137 : /* NB. These conflict with values defined above. */
2138 : #define EF_ARM_SYMSARESORTED 0x04
2139 : #define EF_ARM_DYNSYMSUSESEGIDX 0x08
2140 : #define EF_ARM_MAPSYMSFIRST 0x10
2141 : #define EF_ARM_EABIMASK 0XFF000000
2142 :
2143 : #define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
2144 : #define EF_ARM_EABI_UNKNOWN 0x00000000
2145 : #define EF_ARM_EABI_VER1 0x01000000
2146 : #define EF_ARM_EABI_VER2 0x02000000
2147 :
2148 : /* Additional symbol types for Thumb */
2149 : #define STT_ARM_TFUNC 0xd
2150 :
2151 : /* ARM-specific values for sh_flags */
2152 : #define SHF_ARM_ENTRYSECT 0x10000000 /* Section contains an entry point */
2153 : #define SHF_ARM_COMDEF 0x80000000 /* Section may be multiply defined
2154 : in the input to a link step */
2155 :
2156 : /* ARM-specific program header flags */
2157 : #define PF_ARM_SB 0x10000000 /* Segment contains the location
2158 : addressed by the static base */
2159 :
2160 : /* Processor specific values for the Phdr p_type field. */
2161 : #define PT_ARM_EXIDX 0x70000001 /* .ARM.exidx segment */
2162 :
2163 : /* ARM relocs. */
2164 :
2165 : #define R_ARM_NONE 0 /* No reloc */
2166 : #define R_ARM_PC24 1 /* PC relative 26 bit branch */
2167 : #define R_ARM_ABS32 2 /* Direct 32 bit */
2168 : #define R_ARM_REL32 3 /* PC relative 32 bit */
2169 : #define R_ARM_PC13 4
2170 : #define R_ARM_ABS16 5 /* Direct 16 bit */
2171 : #define R_ARM_ABS12 6 /* Direct 12 bit */
2172 : #define R_ARM_THM_ABS5 7
2173 : #define R_ARM_ABS8 8 /* Direct 8 bit */
2174 : #define R_ARM_SBREL32 9
2175 : #define R_ARM_THM_PC22 10
2176 : #define R_ARM_THM_PC8 11
2177 : #define R_ARM_AMP_VCALL9 12
2178 : #define R_ARM_SWI24 13
2179 : #define R_ARM_THM_SWI8 14
2180 : #define R_ARM_XPC25 15
2181 : #define R_ARM_THM_XPC22 16
2182 : #define R_ARM_TLS_DTPMOD32 17 /* ID of module containing symbol */
2183 : #define R_ARM_TLS_DTPOFF32 18 /* Offset in TLS block */
2184 : #define R_ARM_TLS_TPOFF32 19 /* Offset in static TLS block */
2185 : #define R_ARM_COPY 20 /* Copy symbol at runtime */
2186 : #define R_ARM_GLOB_DAT 21 /* Create GOT entry */
2187 : #define R_ARM_JUMP_SLOT 22 /* Create PLT entry */
2188 : #define R_ARM_RELATIVE 23 /* Adjust by program base */
2189 : #define R_ARM_GOTOFF 24 /* 32 bit offset to GOT */
2190 : #define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */
2191 : #define R_ARM_GOT32 26 /* 32 bit GOT entry */
2192 : #define R_ARM_PLT32 27 /* 32 bit PLT address */
2193 : #define R_ARM_ALU_PCREL_7_0 32
2194 : #define R_ARM_ALU_PCREL_15_8 33
2195 : #define R_ARM_ALU_PCREL_23_15 34
2196 : #define R_ARM_LDR_SBREL_11_0 35
2197 : #define R_ARM_ALU_SBREL_19_12 36
2198 : #define R_ARM_ALU_SBREL_27_20 37
2199 : #define R_ARM_GNU_VTENTRY 100
2200 : #define R_ARM_GNU_VTINHERIT 101
2201 : #define R_ARM_THM_PC11 102 /* thumb unconditional branch */
2202 : #define R_ARM_THM_PC9 103 /* thumb conditional branch */
2203 : #define R_ARM_TLS_GD32 104 /* PC-rel 32 bit for global dynamic
2204 : thread local data */
2205 : #define R_ARM_TLS_LDM32 105 /* PC-rel 32 bit for local dynamic
2206 : thread local data */
2207 : #define R_ARM_TLS_LDO32 106 /* 32 bit offset relative to TLS
2208 : block */
2209 : #define R_ARM_TLS_IE32 107 /* PC-rel 32 bit for GOT entry of
2210 : static TLS block offset */
2211 : #define R_ARM_TLS_LE32 108 /* 32 bit offset relative to static
2212 : TLS block */
2213 : #define R_ARM_RXPC25 249
2214 : #define R_ARM_RSBREL32 250
2215 : #define R_ARM_THM_RPC22 251
2216 : #define R_ARM_RREL32 252
2217 : #define R_ARM_RABS22 253
2218 : #define R_ARM_RPC24 254
2219 : #define R_ARM_RBASE 255
2220 : /* Keep this the last entry. */
2221 : #define R_ARM_NUM 256
2222 :
2223 : /* IA-64 specific declarations. */
2224 :
2225 : /* Processor specific flags for the Ehdr e_flags field. */
2226 : #define EF_IA_64_MASKOS 0x0000000f /* os-specific flags */
2227 : #define EF_IA_64_ABI64 0x00000010 /* 64-bit ABI */
2228 : #define EF_IA_64_ARCH 0xff000000 /* arch. version mask */
2229 :
2230 : /* Processor specific values for the Phdr p_type field. */
2231 : #define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* arch extension bits */
2232 : #define PT_IA_64_UNWIND (PT_LOPROC + 1) /* ia64 unwind bits */
2233 : #define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12)
2234 : #define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13)
2235 : #define PT_IA_64_HP_STACK (PT_LOOS + 0x14)
2236 :
2237 : /* Processor specific flags for the Phdr p_flags field. */
2238 : #define PF_IA_64_NORECOV 0x80000000 /* spec insns w/o recovery */
2239 :
2240 : /* Processor specific values for the Shdr sh_type field. */
2241 : #define SHT_IA_64_EXT (SHT_LOPROC + 0) /* extension bits */
2242 : #define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* unwind bits */
2243 :
2244 : /* Processor specific flags for the Shdr sh_flags field. */
2245 : #define SHF_IA_64_SHORT 0x10000000 /* section near gp */
2246 : #define SHF_IA_64_NORECOV 0x20000000 /* spec insns w/o recovery */
2247 :
2248 : /* Processor specific values for the Dyn d_tag field. */
2249 : #define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0)
2250 : #define DT_IA_64_NUM 1
2251 :
2252 : /* IA-64 relocations. */
2253 : #define R_IA64_NONE 0x00 /* none */
2254 : #define R_IA64_IMM14 0x21 /* symbol + addend, add imm14 */
2255 : #define R_IA64_IMM22 0x22 /* symbol + addend, add imm22 */
2256 : #define R_IA64_IMM64 0x23 /* symbol + addend, mov imm64 */
2257 : #define R_IA64_DIR32MSB 0x24 /* symbol + addend, data4 MSB */
2258 : #define R_IA64_DIR32LSB 0x25 /* symbol + addend, data4 LSB */
2259 : #define R_IA64_DIR64MSB 0x26 /* symbol + addend, data8 MSB */
2260 : #define R_IA64_DIR64LSB 0x27 /* symbol + addend, data8 LSB */
2261 : #define R_IA64_GPREL22 0x2a /* @gprel(sym + add), add imm22 */
2262 : #define R_IA64_GPREL64I 0x2b /* @gprel(sym + add), mov imm64 */
2263 : #define R_IA64_GPREL32MSB 0x2c /* @gprel(sym + add), data4 MSB */
2264 : #define R_IA64_GPREL32LSB 0x2d /* @gprel(sym + add), data4 LSB */
2265 : #define R_IA64_GPREL64MSB 0x2e /* @gprel(sym + add), data8 MSB */
2266 : #define R_IA64_GPREL64LSB 0x2f /* @gprel(sym + add), data8 LSB */
2267 : #define R_IA64_LTOFF22 0x32 /* @ltoff(sym + add), add imm22 */
2268 : #define R_IA64_LTOFF64I 0x33 /* @ltoff(sym + add), mov imm64 */
2269 : #define R_IA64_PLTOFF22 0x3a /* @pltoff(sym + add), add imm22 */
2270 : #define R_IA64_PLTOFF64I 0x3b /* @pltoff(sym + add), mov imm64 */
2271 : #define R_IA64_PLTOFF64MSB 0x3e /* @pltoff(sym + add), data8 MSB */
2272 : #define R_IA64_PLTOFF64LSB 0x3f /* @pltoff(sym + add), data8 LSB */
2273 : #define R_IA64_FPTR64I 0x43 /* @fptr(sym + add), mov imm64 */
2274 : #define R_IA64_FPTR32MSB 0x44 /* @fptr(sym + add), data4 MSB */
2275 : #define R_IA64_FPTR32LSB 0x45 /* @fptr(sym + add), data4 LSB */
2276 : #define R_IA64_FPTR64MSB 0x46 /* @fptr(sym + add), data8 MSB */
2277 : #define R_IA64_FPTR64LSB 0x47 /* @fptr(sym + add), data8 LSB */
2278 : #define R_IA64_PCREL60B 0x48 /* @pcrel(sym + add), brl */
2279 : #define R_IA64_PCREL21B 0x49 /* @pcrel(sym + add), ptb, call */
2280 : #define R_IA64_PCREL21M 0x4a /* @pcrel(sym + add), chk.s */
2281 : #define R_IA64_PCREL21F 0x4b /* @pcrel(sym + add), fchkf */
2282 : #define R_IA64_PCREL32MSB 0x4c /* @pcrel(sym + add), data4 MSB */
2283 : #define R_IA64_PCREL32LSB 0x4d /* @pcrel(sym + add), data4 LSB */
2284 : #define R_IA64_PCREL64MSB 0x4e /* @pcrel(sym + add), data8 MSB */
2285 : #define R_IA64_PCREL64LSB 0x4f /* @pcrel(sym + add), data8 LSB */
2286 : #define R_IA64_LTOFF_FPTR22 0x52 /* @ltoff(@fptr(s+a)), imm22 */
2287 : #define R_IA64_LTOFF_FPTR64I 0x53 /* @ltoff(@fptr(s+a)), imm64 */
2288 : #define R_IA64_LTOFF_FPTR32MSB 0x54 /* @ltoff(@fptr(s+a)), data4 MSB */
2289 : #define R_IA64_LTOFF_FPTR32LSB 0x55 /* @ltoff(@fptr(s+a)), data4 LSB */
2290 : #define R_IA64_LTOFF_FPTR64MSB 0x56 /* @ltoff(@fptr(s+a)), data8 MSB */
2291 : #define R_IA64_LTOFF_FPTR64LSB 0x57 /* @ltoff(@fptr(s+a)), data8 LSB */
2292 : #define R_IA64_SEGREL32MSB 0x5c /* @segrel(sym + add), data4 MSB */
2293 : #define R_IA64_SEGREL32LSB 0x5d /* @segrel(sym + add), data4 LSB */
2294 : #define R_IA64_SEGREL64MSB 0x5e /* @segrel(sym + add), data8 MSB */
2295 : #define R_IA64_SEGREL64LSB 0x5f /* @segrel(sym + add), data8 LSB */
2296 : #define R_IA64_SECREL32MSB 0x64 /* @secrel(sym + add), data4 MSB */
2297 : #define R_IA64_SECREL32LSB 0x65 /* @secrel(sym + add), data4 LSB */
2298 : #define R_IA64_SECREL64MSB 0x66 /* @secrel(sym + add), data8 MSB */
2299 : #define R_IA64_SECREL64LSB 0x67 /* @secrel(sym + add), data8 LSB */
2300 : #define R_IA64_REL32MSB 0x6c /* data 4 + REL */
2301 : #define R_IA64_REL32LSB 0x6d /* data 4 + REL */
2302 : #define R_IA64_REL64MSB 0x6e /* data 8 + REL */
2303 : #define R_IA64_REL64LSB 0x6f /* data 8 + REL */
2304 : #define R_IA64_LTV32MSB 0x74 /* symbol + addend, data4 MSB */
2305 : #define R_IA64_LTV32LSB 0x75 /* symbol + addend, data4 LSB */
2306 : #define R_IA64_LTV64MSB 0x76 /* symbol + addend, data8 MSB */
2307 : #define R_IA64_LTV64LSB 0x77 /* symbol + addend, data8 LSB */
2308 : #define R_IA64_PCREL21BI 0x79 /* @pcrel(sym + add), 21bit inst */
2309 : #define R_IA64_PCREL22 0x7a /* @pcrel(sym + add), 22bit inst */
2310 : #define R_IA64_PCREL64I 0x7b /* @pcrel(sym + add), 64bit inst */
2311 : #define R_IA64_IPLTMSB 0x80 /* dynamic reloc, imported PLT, MSB */
2312 : #define R_IA64_IPLTLSB 0x81 /* dynamic reloc, imported PLT, LSB */
2313 : #define R_IA64_COPY 0x84 /* copy relocation */
2314 : #define R_IA64_SUB 0x85 /* Addend and symbol difference */
2315 : #define R_IA64_LTOFF22X 0x86 /* LTOFF22, relaxable. */
2316 : #define R_IA64_LDXMOV 0x87 /* Use of LTOFF22X. */
2317 : #define R_IA64_TPREL14 0x91 /* @tprel(sym + add), imm14 */
2318 : #define R_IA64_TPREL22 0x92 /* @tprel(sym + add), imm22 */
2319 : #define R_IA64_TPREL64I 0x93 /* @tprel(sym + add), imm64 */
2320 : #define R_IA64_TPREL64MSB 0x96 /* @tprel(sym + add), data8 MSB */
2321 : #define R_IA64_TPREL64LSB 0x97 /* @tprel(sym + add), data8 LSB */
2322 : #define R_IA64_LTOFF_TPREL22 0x9a /* @ltoff(@tprel(s+a)), imm2 */
2323 : #define R_IA64_DTPMOD64MSB 0xa6 /* @dtpmod(sym + add), data8 MSB */
2324 : #define R_IA64_DTPMOD64LSB 0xa7 /* @dtpmod(sym + add), data8 LSB */
2325 : #define R_IA64_LTOFF_DTPMOD22 0xaa /* @ltoff(@dtpmod(sym + add)), imm22 */
2326 : #define R_IA64_DTPREL14 0xb1 /* @dtprel(sym + add), imm14 */
2327 : #define R_IA64_DTPREL22 0xb2 /* @dtprel(sym + add), imm22 */
2328 : #define R_IA64_DTPREL64I 0xb3 /* @dtprel(sym + add), imm64 */
2329 : #define R_IA64_DTPREL32MSB 0xb4 /* @dtprel(sym + add), data4 MSB */
2330 : #define R_IA64_DTPREL32LSB 0xb5 /* @dtprel(sym + add), data4 LSB */
2331 : #define R_IA64_DTPREL64MSB 0xb6 /* @dtprel(sym + add), data8 MSB */
2332 : #define R_IA64_DTPREL64LSB 0xb7 /* @dtprel(sym + add), data8 LSB */
2333 : #define R_IA64_LTOFF_DTPREL22 0xba /* @ltoff(@dtprel(s+a)), imm22 */
2334 :
2335 : /* SH specific declarations */
2336 :
2337 : /* SH relocs. */
2338 : #define R_SH_NONE 0
2339 : #define R_SH_DIR32 1
2340 : #define R_SH_REL32 2
2341 : #define R_SH_DIR8WPN 3
2342 : #define R_SH_IND12W 4
2343 : #define R_SH_DIR8WPL 5
2344 : #define R_SH_DIR8WPZ 6
2345 : #define R_SH_DIR8BP 7
2346 : #define R_SH_DIR8W 8
2347 : #define R_SH_DIR8L 9
2348 : #define R_SH_SWITCH16 25
2349 : #define R_SH_SWITCH32 26
2350 : #define R_SH_USES 27
2351 : #define R_SH_COUNT 28
2352 : #define R_SH_ALIGN 29
2353 : #define R_SH_CODE 30
2354 : #define R_SH_DATA 31
2355 : #define R_SH_LABEL 32
2356 : #define R_SH_SWITCH8 33
2357 : #define R_SH_GNU_VTINHERIT 34
2358 : #define R_SH_GNU_VTENTRY 35
2359 : #define R_SH_TLS_GD_32 144
2360 : #define R_SH_TLS_LD_32 145
2361 : #define R_SH_TLS_LDO_32 146
2362 : #define R_SH_TLS_IE_32 147
2363 : #define R_SH_TLS_LE_32 148
2364 : #define R_SH_TLS_DTPMOD32 149
2365 : #define R_SH_TLS_DTPOFF32 150
2366 : #define R_SH_TLS_TPOFF32 151
2367 : #define R_SH_GOT32 160
2368 : #define R_SH_PLT32 161
2369 : #define R_SH_COPY 162
2370 : #define R_SH_GLOB_DAT 163
2371 : #define R_SH_JMP_SLOT 164
2372 : #define R_SH_RELATIVE 165
2373 : #define R_SH_GOTOFF 166
2374 : #define R_SH_GOTPC 167
2375 : /* Keep this the last entry. */
2376 : #define R_SH_NUM 256
2377 :
2378 : /* Additional s390 relocs */
2379 :
2380 : #define R_390_NONE 0 /* No reloc. */
2381 : #define R_390_8 1 /* Direct 8 bit. */
2382 : #define R_390_12 2 /* Direct 12 bit. */
2383 : #define R_390_16 3 /* Direct 16 bit. */
2384 : #define R_390_32 4 /* Direct 32 bit. */
2385 : #define R_390_PC32 5 /* PC relative 32 bit. */
2386 : #define R_390_GOT12 6 /* 12 bit GOT offset. */
2387 : #define R_390_GOT32 7 /* 32 bit GOT offset. */
2388 : #define R_390_PLT32 8 /* 32 bit PC relative PLT address. */
2389 : #define R_390_COPY 9 /* Copy symbol at runtime. */
2390 : #define R_390_GLOB_DAT 10 /* Create GOT entry. */
2391 : #define R_390_JMP_SLOT 11 /* Create PLT entry. */
2392 : #define R_390_RELATIVE 12 /* Adjust by program base. */
2393 : #define R_390_GOTOFF32 13 /* 32 bit offset to GOT. */
2394 : #define R_390_GOTPC 14 /* 32 bit PC relative offset to GOT. */
2395 : #define R_390_GOT16 15 /* 16 bit GOT offset. */
2396 : #define R_390_PC16 16 /* PC relative 16 bit. */
2397 : #define R_390_PC16DBL 17 /* PC relative 16 bit shifted by 1. */
2398 : #define R_390_PLT16DBL 18 /* 16 bit PC rel. PLT shifted by 1. */
2399 : #define R_390_PC32DBL 19 /* PC relative 32 bit shifted by 1. */
2400 : #define R_390_PLT32DBL 20 /* 32 bit PC rel. PLT shifted by 1. */
2401 : #define R_390_GOTPCDBL 21 /* 32 bit PC rel. GOT shifted by 1. */
2402 : #define R_390_64 22 /* Direct 64 bit. */
2403 : #define R_390_PC64 23 /* PC relative 64 bit. */
2404 : #define R_390_GOT64 24 /* 64 bit GOT offset. */
2405 : #define R_390_PLT64 25 /* 64 bit PC relative PLT address. */
2406 : #define R_390_GOTENT 26 /* 32 bit PC rel. to GOT entry >> 1. */
2407 : #define R_390_GOTOFF16 27 /* 16 bit offset to GOT. */
2408 : #define R_390_GOTOFF64 28 /* 64 bit offset to GOT. */
2409 : #define R_390_GOTPLT12 29 /* 12 bit offset to jump slot. */
2410 : #define R_390_GOTPLT16 30 /* 16 bit offset to jump slot. */
2411 : #define R_390_GOTPLT32 31 /* 32 bit offset to jump slot. */
2412 : #define R_390_GOTPLT64 32 /* 64 bit offset to jump slot. */
2413 : #define R_390_GOTPLTENT 33 /* 32 bit rel. offset to jump slot. */
2414 : #define R_390_PLTOFF16 34 /* 16 bit offset from GOT to PLT. */
2415 : #define R_390_PLTOFF32 35 /* 32 bit offset from GOT to PLT. */
2416 : #define R_390_PLTOFF64 36 /* 16 bit offset from GOT to PLT. */
2417 : #define R_390_TLS_LOAD 37 /* Tag for load insn in TLS code. */
2418 : #define R_390_TLS_GDCALL 38 /* Tag for function call in general
2419 : dynamic TLS code. */
2420 : #define R_390_TLS_LDCALL 39 /* Tag for function call in local
2421 : dynamic TLS code. */
2422 : #define R_390_TLS_GD32 40 /* Direct 32 bit for general dynamic
2423 : thread local data. */
2424 : #define R_390_TLS_GD64 41 /* Direct 64 bit for general dynamic
2425 : thread local data. */
2426 : #define R_390_TLS_GOTIE12 42 /* 12 bit GOT offset for static TLS
2427 : block offset. */
2428 : #define R_390_TLS_GOTIE32 43 /* 32 bit GOT offset for static TLS
2429 : block offset. */
2430 : #define R_390_TLS_GOTIE64 44 /* 64 bit GOT offset for static TLS
2431 : block offset. */
2432 : #define R_390_TLS_LDM32 45 /* Direct 32 bit for local dynamic
2433 : thread local data in LE code. */
2434 : #define R_390_TLS_LDM64 46 /* Direct 64 bit for local dynamic
2435 : thread local data in LE code. */
2436 : #define R_390_TLS_IE32 47 /* 32 bit address of GOT entry for
2437 : negated static TLS block offset. */
2438 : #define R_390_TLS_IE64 48 /* 64 bit address of GOT entry for
2439 : negated static TLS block offset. */
2440 : #define R_390_TLS_IEENT 49 /* 32 bit rel. offset to GOT entry for
2441 : negated static TLS block offset. */
2442 : #define R_390_TLS_LE32 50 /* 32 bit negated offset relative to
2443 : static TLS block. */
2444 : #define R_390_TLS_LE64 51 /* 64 bit negated offset relative to
2445 : static TLS block. */
2446 : #define R_390_TLS_LDO32 52 /* 32 bit offset relative to TLS
2447 : block. */
2448 : #define R_390_TLS_LDO64 53 /* 64 bit offset relative to TLS
2449 : block. */
2450 : #define R_390_TLS_DTPMOD 54 /* ID of module containing symbol. */
2451 : #define R_390_TLS_DTPOFF 55 /* Offset in TLS block. */
2452 : #define R_390_TLS_TPOFF 56 /* Negated offset in static TLS
2453 : block. */
2454 : #define R_390_20 57 /* Direct 20 bit. */
2455 : #define R_390_GOT20 58 /* 20 bit GOT offset. */
2456 : #define R_390_GOTPLT20 59 /* 20 bit offset to jump slot. */
2457 : #define R_390_TLS_GOTIE20 60 /* 20 bit GOT offset for static TLS
2458 : block offset. */
2459 : /* Keep this the last entry. */
2460 : #define R_390_NUM 61
2461 :
2462 :
2463 : /* CRIS relocations. */
2464 : #define R_CRIS_NONE 0
2465 : #define R_CRIS_8 1
2466 : #define R_CRIS_16 2
2467 : #define R_CRIS_32 3
2468 : #define R_CRIS_8_PCREL 4
2469 : #define R_CRIS_16_PCREL 5
2470 : #define R_CRIS_32_PCREL 6
2471 : #define R_CRIS_GNU_VTINHERIT 7
2472 : #define R_CRIS_GNU_VTENTRY 8
2473 : #define R_CRIS_COPY 9
2474 : #define R_CRIS_GLOB_DAT 10
2475 : #define R_CRIS_JUMP_SLOT 11
2476 : #define R_CRIS_RELATIVE 12
2477 : #define R_CRIS_16_GOT 13
2478 : #define R_CRIS_32_GOT 14
2479 : #define R_CRIS_16_GOTPLT 15
2480 : #define R_CRIS_32_GOTPLT 16
2481 : #define R_CRIS_32_GOTREL 17
2482 : #define R_CRIS_32_PLT_GOTREL 18
2483 : #define R_CRIS_32_PLT_PCREL 19
2484 :
2485 : #define R_CRIS_NUM 20
2486 :
2487 :
2488 : /* AMD x86-64 relocations. */
2489 : #define R_X86_64_NONE 0 /* No reloc */
2490 : #define R_X86_64_64 1 /* Direct 64 bit */
2491 : #define R_X86_64_PC32 2 /* PC relative 32 bit signed */
2492 : #define R_X86_64_GOT32 3 /* 32 bit GOT entry */
2493 : #define R_X86_64_PLT32 4 /* 32 bit PLT address */
2494 : #define R_X86_64_COPY 5 /* Copy symbol at runtime */
2495 : #define R_X86_64_GLOB_DAT 6 /* Create GOT entry */
2496 : #define R_X86_64_JUMP_SLOT 7 /* Create PLT entry */
2497 : #define R_X86_64_RELATIVE 8 /* Adjust by program base */
2498 : #define R_X86_64_GOTPCREL 9 /* 32 bit signed PC relative
2499 : offset to GOT */
2500 : #define R_X86_64_32 10 /* Direct 32 bit zero extended */
2501 : #define R_X86_64_32S 11 /* Direct 32 bit sign extended */
2502 : #define R_X86_64_16 12 /* Direct 16 bit zero extended */
2503 : #define R_X86_64_PC16 13 /* 16 bit sign extended pc relative */
2504 : #define R_X86_64_8 14 /* Direct 8 bit sign extended */
2505 : #define R_X86_64_PC8 15 /* 8 bit sign extended pc relative */
2506 : #define R_X86_64_DTPMOD64 16 /* ID of module containing symbol */
2507 : #define R_X86_64_DTPOFF64 17 /* Offset in module's TLS block */
2508 : #define R_X86_64_TPOFF64 18 /* Offset in initial TLS block */
2509 : #define R_X86_64_TLSGD 19 /* 32 bit signed PC relative offset
2510 : to two GOT entries for GD symbol */
2511 : #define R_X86_64_TLSLD 20 /* 32 bit signed PC relative offset
2512 : to two GOT entries for LD symbol */
2513 : #define R_X86_64_DTPOFF32 21 /* Offset in TLS block */
2514 : #define R_X86_64_GOTTPOFF 22 /* 32 bit signed PC relative offset
2515 : to GOT entry for IE symbol */
2516 : #define R_X86_64_TPOFF32 23 /* Offset in initial TLS block */
2517 :
2518 : #define R_X86_64_NUM 24
2519 :
2520 :
2521 : /* AM33 relocations. */
2522 : #define R_MN10300_NONE 0 /* No reloc. */
2523 : #define R_MN10300_32 1 /* Direct 32 bit. */
2524 : #define R_MN10300_16 2 /* Direct 16 bit. */
2525 : #define R_MN10300_8 3 /* Direct 8 bit. */
2526 : #define R_MN10300_PCREL32 4 /* PC-relative 32-bit. */
2527 : #define R_MN10300_PCREL16 5 /* PC-relative 16-bit signed. */
2528 : #define R_MN10300_PCREL8 6 /* PC-relative 8-bit signed. */
2529 : #define R_MN10300_GNU_VTINHERIT 7 /* Ancient C++ vtable garbage... */
2530 : #define R_MN10300_GNU_VTENTRY 8 /* ... collection annotation. */
2531 : #define R_MN10300_24 9 /* Direct 24 bit. */
2532 : #define R_MN10300_GOTPC32 10 /* 32-bit PCrel offset to GOT. */
2533 : #define R_MN10300_GOTPC16 11 /* 16-bit PCrel offset to GOT. */
2534 : #define R_MN10300_GOTOFF32 12 /* 32-bit offset from GOT. */
2535 : #define R_MN10300_GOTOFF24 13 /* 24-bit offset from GOT. */
2536 : #define R_MN10300_GOTOFF16 14 /* 16-bit offset from GOT. */
2537 : #define R_MN10300_PLT32 15 /* 32-bit PCrel to PLT entry. */
2538 : #define R_MN10300_PLT16 16 /* 16-bit PCrel to PLT entry. */
2539 : #define R_MN10300_GOT32 17 /* 32-bit offset to GOT entry. */
2540 : #define R_MN10300_GOT24 18 /* 24-bit offset to GOT entry. */
2541 : #define R_MN10300_GOT16 19 /* 16-bit offset to GOT entry. */
2542 : #define R_MN10300_COPY 20 /* Copy symbol at runtime. */
2543 : #define R_MN10300_GLOB_DAT 21 /* Create GOT entry. */
2544 : #define R_MN10300_JMP_SLOT 22 /* Create PLT entry. */
2545 : #define R_MN10300_RELATIVE 23 /* Adjust by program base. */
2546 :
2547 : #define R_MN10300_NUM 24
2548 :
2549 :
2550 : /* M32R relocs. */
2551 : #define R_M32R_NONE 0 /* No reloc. */
2552 : #define R_M32R_16 1 /* Direct 16 bit. */
2553 : #define R_M32R_32 2 /* Direct 32 bit. */
2554 : #define R_M32R_24 3 /* Direct 24 bit. */
2555 : #define R_M32R_10_PCREL 4 /* PC relative 10 bit shifted. */
2556 : #define R_M32R_18_PCREL 5 /* PC relative 18 bit shifted. */
2557 : #define R_M32R_26_PCREL 6 /* PC relative 26 bit shifted. */
2558 : #define R_M32R_HI16_ULO 7 /* High 16 bit with unsigned low. */
2559 : #define R_M32R_HI16_SLO 8 /* High 16 bit with signed low. */
2560 : #define R_M32R_LO16 9 /* Low 16 bit. */
2561 : #define R_M32R_SDA16 10 /* 16 bit offset in SDA. */
2562 : #define R_M32R_GNU_VTINHERIT 11
2563 : #define R_M32R_GNU_VTENTRY 12
2564 : /* M32R relocs use SHT_RELA. */
2565 : #define R_M32R_16_RELA 33 /* Direct 16 bit. */
2566 : #define R_M32R_32_RELA 34 /* Direct 32 bit. */
2567 : #define R_M32R_24_RELA 35 /* Direct 24 bit. */
2568 : #define R_M32R_10_PCREL_RELA 36 /* PC relative 10 bit shifted. */
2569 : #define R_M32R_18_PCREL_RELA 37 /* PC relative 18 bit shifted. */
2570 : #define R_M32R_26_PCREL_RELA 38 /* PC relative 26 bit shifted. */
2571 : #define R_M32R_HI16_ULO_RELA 39 /* High 16 bit with unsigned low */
2572 : #define R_M32R_HI16_SLO_RELA 40 /* High 16 bit with signed low */
2573 : #define R_M32R_LO16_RELA 41 /* Low 16 bit */
2574 : #define R_M32R_SDA16_RELA 42 /* 16 bit offset in SDA */
2575 : #define R_M32R_RELA_GNU_VTINHERIT 43
2576 : #define R_M32R_RELA_GNU_VTENTRY 44
2577 : #define R_M32R_REL32 45 /* PC relative 32 bit. */
2578 :
2579 : #define R_M32R_GOT24 48 /* 24 bit GOT entry */
2580 : #define R_M32R_26_PLTREL 49 /* 26 bit PC relative to PLT shifted */
2581 : #define R_M32R_COPY 50 /* Copy symbol at runtime */
2582 : #define R_M32R_GLOB_DAT 51 /* Create GOT entry */
2583 : #define R_M32R_JMP_SLOT 52 /* Create PLT entry */
2584 : #define R_M32R_RELATIVE 53 /* Adjust by program base */
2585 : #define R_M32R_GOTOFF 54 /* 24 bit offset to GOT */
2586 : #define R_M32R_GOTPC24 55 /* 24 bit PC relative offset to GOT */
2587 : #define R_M32R_GOT16_HI_ULO 56 /* High 16 bit GOT entry with unsigned
2588 : low */
2589 : #define R_M32R_GOT16_HI_SLO 57 /* High 16 bit GOT entry with signed
2590 : low */
2591 : #define R_M32R_GOT16_LO 58 /* Low 16 bit GOT entry */
2592 : #define R_M32R_GOTPC_HI_ULO 59 /* High 16 bit PC relative offset to
2593 : GOT with unsigned low */
2594 : #define R_M32R_GOTPC_HI_SLO 60 /* High 16 bit PC relative offset to
2595 : GOT with signed low */
2596 : #define R_M32R_GOTPC_LO 61 /* Low 16 bit PC relative offset to
2597 : GOT */
2598 : #define R_M32R_GOTOFF_HI_ULO 62 /* High 16 bit offset to GOT
2599 : with unsigned low */
2600 : #define R_M32R_GOTOFF_HI_SLO 63 /* High 16 bit offset to GOT
2601 : with signed low */
2602 : #define R_M32R_GOTOFF_LO 64 /* Low 16 bit offset to GOT */
2603 : #define R_M32R_NUM 256 /* Keep this the last entry. */
2604 :
2605 :
2606 : __END_DECLS
2607 :
2608 : #endif /* elf.h */
|