HIP: Heterogenous-computing Interface for Portability
elf_types.hpp
1 /*
2 Copyright (C) 2001-2015 by Serge Lamikhov-Center
3 
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is
9 furnished to do so, subject to the following conditions:
10 
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
13 
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 THE SOFTWARE.
21 */
22 
23 #ifndef ELFTYPES_H
24 #define ELFTYPES_H
25 
26 #ifndef ELFIO_NO_OWN_TYPES
27 #if !defined(ELFIO_NO_CSTDINT) && !defined(ELFIO_NO_INTTYPES)
28 #include <stdint.h>
29 #else
30 typedef unsigned char uint8_t;
31 typedef signed char int8_t;
32 typedef unsigned short uint16_t;
33 typedef signed short int16_t;
34 #ifdef _MSC_VER
35 typedef unsigned __int32 uint32_t;
36 typedef signed __int32 int32_t;
37 typedef unsigned __int64 uint64_t;
38 typedef signed __int64 int64_t;
39 #else
40 typedef unsigned int uint32_t;
41 typedef signed int int32_t;
42 typedef unsigned long long uint64_t;
43 typedef signed long long int64_t;
44 #endif // _MSC_VER
45 #endif // ELFIO_NO_CSTDINT
46 #endif // ELFIO_NO_OWN_TYPES
47 
48 namespace ELFIO {
49 
50 // Attention! Platform depended definitions.
51 typedef uint16_t Elf_Half;
52 typedef uint32_t Elf_Word;
53 typedef int32_t Elf_Sword;
54 typedef uint64_t Elf_Xword;
55 typedef int64_t Elf_Sxword;
56 
57 typedef uint32_t Elf32_Addr;
58 typedef uint32_t Elf32_Off;
59 typedef uint64_t Elf64_Addr;
60 typedef uint64_t Elf64_Off;
61 
62 #define Elf32_Half Elf_Half
63 #define Elf64_Half Elf_Half
64 #define Elf32_Word Elf_Word
65 #define Elf64_Word Elf_Word
66 #define Elf32_Sword Elf_Sword
67 #define Elf64_Sword Elf_Sword
68 
70 // ELF Header Constants
71 
72 // File type
73 #define ET_NONE 0
74 #define ET_REL 1
75 #define ET_EXEC 2
76 #define ET_DYN 3
77 #define ET_CORE 4
78 #define ET_LOOS 0xFE00
79 #define ET_HIOS 0xFEFF
80 #define ET_LOPROC 0xFF00
81 #define ET_HIPROC 0xFFFF
82 
83 
84 #define EM_NONE 0 // No machine
85 #define EM_M32 1 // AT&T WE 32100
86 #define EM_SPARC 2 // SUN SPARC
87 #define EM_386 3 // Intel 80386
88 #define EM_68K 4 // Motorola m68k family
89 #define EM_88K 5 // Motorola m88k family
90 #define EM_486 6 // Intel 80486// Reserved for future use
91 #define EM_860 7 // Intel 80860
92 #define EM_MIPS 8 // MIPS R3000 (officially, big-endian only)
93 #define EM_S370 9 // IBM System/370
94 #define EM_MIPS_RS3_LE 10 // MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated
95 #define EM_res011 11 // Reserved
96 #define EM_res012 12 // Reserved
97 #define EM_res013 13 // Reserved
98 #define EM_res014 14 // Reserved
99 #define EM_PARISC 15 // HPPA
100 #define EM_res016 16 // Reserved
101 #define EM_VPP550 17 // Fujitsu VPP500
102 #define EM_SPARC32PLUS 18 // Sun's "v8plus"
103 #define EM_960 19 // Intel 80960
104 #define EM_PPC 20 // PowerPC
105 #define EM_PPC64 21 // 64-bit PowerPC
106 #define EM_S390 22 // IBM S/390
107 #define EM_SPU 23 // Sony/Toshiba/IBM SPU
108 #define EM_res024 24 // Reserved
109 #define EM_res025 25 // Reserved
110 #define EM_res026 26 // Reserved
111 #define EM_res027 27 // Reserved
112 #define EM_res028 28 // Reserved
113 #define EM_res029 29 // Reserved
114 #define EM_res030 30 // Reserved
115 #define EM_res031 31 // Reserved
116 #define EM_res032 32 // Reserved
117 #define EM_res033 33 // Reserved
118 #define EM_res034 34 // Reserved
119 #define EM_res035 35 // Reserved
120 #define EM_V800 36 // NEC V800 series
121 #define EM_FR20 37 // Fujitsu FR20
122 #define EM_RH32 38 // TRW RH32
123 #define EM_MCORE 39 // Motorola M*Core // May also be taken by Fujitsu MMA
124 #define EM_RCE 39 // Old name for MCore
125 #define EM_ARM 40 // ARM
126 #define EM_OLD_ALPHA 41 // Digital Alpha
127 #define EM_SH 42 // Renesas (formerly Hitachi) / SuperH SH
128 #define EM_SPARCV9 43 // SPARC v9 64-bit
129 #define EM_TRICORE 44 // Siemens Tricore embedded processor
130 #define EM_ARC 45 // ARC Cores
131 #define EM_H8_300 46 // Renesas (formerly Hitachi) H8/300
132 #define EM_H8_300H 47 // Renesas (formerly Hitachi) H8/300H
133 #define EM_H8S 48 // Renesas (formerly Hitachi) H8S
134 #define EM_H8_500 49 // Renesas (formerly Hitachi) H8/500
135 #define EM_IA_64 50 // Intel IA-64 Processor
136 #define EM_MIPS_X 51 // Stanford MIPS-X
137 #define EM_COLDFIRE 52 // Motorola Coldfire
138 #define EM_68HC12 53 // Motorola M68HC12
139 #define EM_MMA 54 // Fujitsu Multimedia Accelerator
140 #define EM_PCP 55 // Siemens PCP
141 #define EM_NCPU 56 // Sony nCPU embedded RISC processor
142 #define EM_NDR1 57 // Denso NDR1 microprocesspr
143 #define EM_STARCORE 58 // Motorola Star*Core processor
144 #define EM_ME16 59 // Toyota ME16 processor
145 #define EM_ST100 60 // STMicroelectronics ST100 processor
146 #define EM_TINYJ 61 // Advanced Logic Corp. TinyJ embedded processor
147 #define EM_X86_64 62 // Advanced Micro Devices X86-64 processor
148 #define EM_PDSP 63 // Sony DSP Processor
149 #define EM_PDP10 64 // Digital Equipment Corp. PDP-10
150 #define EM_PDP11 65 // Digital Equipment Corp. PDP-11
151 #define EM_FX66 66 // Siemens FX66 microcontroller
152 #define EM_ST9PLUS 67 // STMicroelectronics ST9+ 8/16 bit microcontroller
153 #define EM_ST7 68 // STMicroelectronics ST7 8-bit microcontroller
154 #define EM_68HC16 69 // Motorola MC68HC16 Microcontroller
155 #define EM_68HC11 70 // Motorola MC68HC11 Microcontroller
156 #define EM_68HC08 71 // Motorola MC68HC08 Microcontroller
157 #define EM_68HC05 72 // Motorola MC68HC05 Microcontroller
158 #define EM_SVX 73 // Silicon Graphics SVx
159 #define EM_ST19 74 // STMicroelectronics ST19 8-bit cpu
160 #define EM_VAX 75 // Digital VAX
161 #define EM_CRIS 76 // Axis Communications 32-bit embedded processor
162 #define EM_JAVELIN 77 // Infineon Technologies 32-bit embedded cpu
163 #define EM_FIREPATH 78 // Element 14 64-bit DSP processor
164 #define EM_ZSP 79 // LSI Logic's 16-bit DSP processor
165 #define EM_MMIX 80 // Donald Knuth's educational 64-bit processor
166 #define EM_HUANY 81 // Harvard's machine-independent format
167 #define EM_PRISM 82 // SiTera Prism
168 #define EM_AVR 83 // Atmel AVR 8-bit microcontroller
169 #define EM_FR30 84 // Fujitsu FR30
170 #define EM_D10V 85 // Mitsubishi D10V
171 #define EM_D30V 86 // Mitsubishi D30V
172 #define EM_V850 87 // NEC v850
173 #define EM_M32R 88 // Renesas M32R (formerly Mitsubishi M32R)
174 #define EM_MN10300 89 // Matsushita MN10300
175 #define EM_MN10200 90 // Matsushita MN10200
176 #define EM_PJ 91 // picoJava
177 #define EM_OPENRISC 92 // OpenRISC 32-bit embedded processor
178 #define EM_ARC_A5 93 // ARC Cores Tangent-A5
179 #define EM_XTENSA 94 // Tensilica Xtensa Architecture
180 #define EM_VIDEOCORE 95 // Alphamosaic VideoCore processor
181 #define EM_TMM_GPP 96 // Thompson Multimedia General Purpose Processor
182 #define EM_NS32K 97 // National Semiconductor 32000 series
183 #define EM_TPC 98 // Tenor Network TPC processor
184 #define EM_SNP1K 99 // Trebia SNP 1000 processor
185 #define EM_ST200 100 // STMicroelectronics ST200 microcontroller
186 #define EM_IP2K 101 // Ubicom IP2022 micro controller
187 #define EM_MAX 102 // MAX Processor
188 #define EM_CR 103 // National Semiconductor CompactRISC
189 #define EM_F2MC16 104 // Fujitsu F2MC16
190 #define EM_MSP430 105 // TI msp430 micro controller
191 #define EM_BLACKFIN 106 // ADI Blackfin
192 #define EM_SE_C33 107 // S1C33 Family of Seiko Epson processors
193 #define EM_SEP 108 // Sharp embedded microprocessor
194 #define EM_ARCA 109 // Arca RISC Microprocessor
195 #define EM_UNICORE 110 // Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University
196 #define EM_EXCESS 111 // eXcess: 16/32/64-bit configurable embedded CPU
197 #define EM_DXP 112 // Icera Semiconductor Inc. Deep Execution Processor
198 #define EM_ALTERA_NIOS2 113 // Altera Nios II soft-core processor
199 #define EM_CRX 114 // National Semiconductor CRX
200 #define EM_XGATE 115 // Motorola XGATE embedded processor
201 #define EM_C166 116 // Infineon C16x/XC16x processor
202 #define EM_M16C 117 // Renesas M16C series microprocessors
203 #define EM_DSPIC30F 118 // Microchip Technology dsPIC30F Digital Signal Controller
204 #define EM_CE 119 // Freescale Communication Engine RISC core
205 #define EM_M32C 120 // Renesas M32C series microprocessors
206 #define EM_res121 121 // Reserved
207 #define EM_res122 122 // Reserved
208 #define EM_res123 123 // Reserved
209 #define EM_res124 124 // Reserved
210 #define EM_res125 125 // Reserved
211 #define EM_res126 126 // Reserved
212 #define EM_res127 127 // Reserved
213 #define EM_res128 128 // Reserved
214 #define EM_res129 129 // Reserved
215 #define EM_res130 130 // Reserved
216 #define EM_TSK3000 131 // Altium TSK3000 core
217 #define EM_RS08 132 // Freescale RS08 embedded processor
218 #define EM_res133 133 // Reserved
219 #define EM_ECOG2 134 // Cyan Technology eCOG2 microprocessor
220 #define EM_SCORE 135 // Sunplus Score
221 #define EM_SCORE7 135 // Sunplus S+core7 RISC processor
222 #define EM_DSP24 136 // New Japan Radio (NJR) 24-bit DSP Processor
223 #define EM_VIDEOCORE3 137 // Broadcom VideoCore III processor
224 #define EM_LATTICEMICO32 138 // RISC processor for Lattice FPGA architecture
225 #define EM_SE_C17 139 // Seiko Epson C17 family
226 #define EM_TI_C6000 140 // Texas Instruments TMS320C6000 DSP family
227 #define EM_TI_C2000 141 // Texas Instruments TMS320C2000 DSP family
228 #define EM_TI_C5500 142 // Texas Instruments TMS320C55x DSP family
229 #define EM_res143 143 // Reserved
230 #define EM_res144 144 // Reserved
231 #define EM_res145 145 // Reserved
232 #define EM_res146 146 // Reserved
233 #define EM_res147 147 // Reserved
234 #define EM_res148 148 // Reserved
235 #define EM_res149 149 // Reserved
236 #define EM_res150 150 // Reserved
237 #define EM_res151 151 // Reserved
238 #define EM_res152 152 // Reserved
239 #define EM_res153 153 // Reserved
240 #define EM_res154 154 // Reserved
241 #define EM_res155 155 // Reserved
242 #define EM_res156 156 // Reserved
243 #define EM_res157 157 // Reserved
244 #define EM_res158 158 // Reserved
245 #define EM_res159 159 // Reserved
246 #define EM_MMDSP_PLUS 160 // STMicroelectronics 64bit VLIW Data Signal Processor
247 #define EM_CYPRESS_M8C 161 // Cypress M8C microprocessor
248 #define EM_R32C 162 // Renesas R32C series microprocessors
249 #define EM_TRIMEDIA 163 // NXP Semiconductors TriMedia architecture family
250 #define EM_QDSP6 164 // QUALCOMM DSP6 Processor
251 #define EM_8051 165 // Intel 8051 and variants
252 #define EM_STXP7X 166 // STMicroelectronics STxP7x family
253 #define EM_NDS32 167 // Andes Technology compact code size embedded RISC processor family
254 #define EM_ECOG1 168 // Cyan Technology eCOG1X family
255 #define EM_ECOG1X 168 // Cyan Technology eCOG1X family
256 #define EM_MAXQ30 169 // Dallas Semiconductor MAXQ30 Core Micro-controllers
257 #define EM_XIMO16 170 // New Japan Radio (NJR) 16-bit DSP Processor
258 #define EM_MANIK 171 // M2000 Reconfigurable RISC Microprocessor
259 #define EM_CRAYNV2 172 // Cray Inc. NV2 vector architecture
260 #define EM_RX 173 // Renesas RX family
261 #define EM_METAG 174 // Imagination Technologies META processor architecture
262 #define EM_MCST_ELBRUS 175 // MCST Elbrus general purpose hardware architecture
263 #define EM_ECOG16 176 // Cyan Technology eCOG16 family
264 #define EM_CR16 177 // National Semiconductor CompactRISC 16-bit processor
265 #define EM_ETPU 178 // Freescale Extended Time Processing Unit
266 #define EM_SLE9X 179 // Infineon Technologies SLE9X core
267 #define EM_L1OM 180 // Intel L1OM
268 #define EM_INTEL181 181 // Reserved by Intel
269 #define EM_INTEL182 182 // Reserved by Intel
270 #define EM_res183 183 // Reserved by ARM
271 #define EM_res184 184 // Reserved by ARM
272 #define EM_AVR32 185 // Atmel Corporation 32-bit microprocessor family
273 #define EM_STM8 186 // STMicroeletronics STM8 8-bit microcontroller
274 #define EM_TILE64 187 // Tilera TILE64 multicore architecture family
275 #define EM_TILEPRO 188 // Tilera TILEPro multicore architecture family
276 #define EM_MICROBLAZE 189 // Xilinx MicroBlaze 32-bit RISC soft processor core
277 #define EM_CUDA 190 // NVIDIA CUDA architecture
278 #define EM_TILEGX 191 // Tilera TILE-Gx multicore architecture family
279 #define EM_CLOUDSHIELD 192 // CloudShield architecture family
280 #define EM_COREA_1ST 193 // KIPO-KAIST Core-A 1st generation processor family
281 #define EM_COREA_2ND 194 // KIPO-KAIST Core-A 2nd generation processor family
282 #define EM_ARC_COMPACT2 195 // Synopsys ARCompact V2
283 #define EM_OPEN8 196 // Open8 8-bit RISC soft processor core
284 #define EM_RL78 197 // Renesas RL78 family
285 #define EM_VIDEOCORE5 198 // Broadcom VideoCore V processor
286 #define EM_78KOR 199 // Renesas 78KOR family
287 #define EM_56800EX 200 // Freescale 56800EX Digital Signal Controller (DSC)
288 #define EM_BA1 201 // Beyond BA1 CPU architecture
289 #define EM_BA2 202 // Beyond BA2 CPU architecture
290 #define EM_XCORE 203 // XMOS xCORE processor family
291 #define EM_MCHP_PIC 204 // Microchip 8-bit PIC(r) family
292 #define EM_INTEL205 205 // Reserved by Intel
293 #define EM_INTEL206 206 // Reserved by Intel
294 #define EM_INTEL207 207 // Reserved by Intel
295 #define EM_INTEL208 208 // Reserved by Intel
296 #define EM_INTEL209 209 // Reserved by Intel
297 #define EM_KM32 210 // KM211 KM32 32-bit processor
298 #define EM_KMX32 211 // KM211 KMX32 32-bit processor
299 #define EM_KMX16 212 // KM211 KMX16 16-bit processor
300 #define EM_KMX8 213 // KM211 KMX8 8-bit processor
301 #define EM_KVARC 214 // KM211 KVARC processor
302 #define EM_CDP 215 // Paneve CDP architecture family
303 #define EM_COGE 216 // Cognitive Smart Memory Processor
304 #define EM_COOL 217 // iCelero CoolEngine
305 #define EM_NORC 218 // Nanoradio Optimized RISC
306 #define EM_CSR_KALIMBA 219 // CSR Kalimba architecture family
307 #define EM_Z80 220 // Zilog Z80
308 #define EM_VISIUM 221 // Controls and Data Services VISIUMcore processor
309 #define EM_FT32 222 // FTDI Chip FT32 high performance 32-bit RISC architecture
310 #define EM_MOXIE 223 // Moxie processor family
311 #define EM_AMDGPU 224 // AMD GPU architecture
312 #define EM_RISCV 243 // RISC-V
313 #define EM_LANAI 244 // Lanai processor
314 #define EM_CEVA 245 // CEVA Processor Architecture Family
315 #define EM_CEVA_X2 246 // CEVA X2 Processor Family
316 #define EM_BPF 247 // Linux BPF – in-kernel virtual machine
317 
318 // File version
319 #define EV_NONE 0
320 #define EV_CURRENT 1
321 
322 // Identification index
323 #define EI_MAG0 0
324 #define EI_MAG1 1
325 #define EI_MAG2 2
326 #define EI_MAG3 3
327 #define EI_CLASS 4
328 #define EI_DATA 5
329 #define EI_VERSION 6
330 #define EI_OSABI 7
331 #define EI_ABIVERSION 8
332 #define EI_PAD 9
333 #define EI_NIDENT 16
334 
335 // Magic number
336 #define ELFMAG0 0x7F
337 #define ELFMAG1 'E'
338 #define ELFMAG2 'L'
339 #define ELFMAG3 'F'
340 
341 // File class
342 #define ELFCLASSNONE 0
343 #define ELFCLASS32 1
344 #define ELFCLASS64 2
345 
346 // Encoding
347 #define ELFDATANONE 0
348 #define ELFDATA2LSB 1
349 #define ELFDATA2MSB 2
350 
351 // OS extensions
352 #define ELFOSABI_NONE 0 // No extensions or unspecified
353 #define ELFOSABI_HPUX 1 // Hewlett-Packard HP-UX
354 #define ELFOSABI_NETBSD 2 // NetBSD
355 #define ELFOSABI_LINUX 3 // Linux
356 #define ELFOSABI_SOLARIS 6 // Sun Solaris
357 #define ELFOSABI_AIX 7 // AIX
358 #define ELFOSABI_IRIX 8 // IRIX
359 #define ELFOSABI_FREEBSD 9 // FreeBSD
360 #define ELFOSABI_TRU64 10 // Compaq TRU64 UNIX
361 #define ELFOSABI_MODESTO 11 // Novell Modesto
362 #define ELFOSABI_OPENBSD 12 // Open BSD
363 #define ELFOSABI_OPENVMS 13 // Open VMS
364 #define ELFOSABI_NSK 14 // Hewlett-Packard Non-Stop Kernel
365 #define ELFOSABI_AROS 15 // Amiga Research OS
366 #define ELFOSABI_FENIXOS 16 // The FenixOS highly scalable multi-core OS
367 // 64-255 Architecture-specific value range
368 
369 
371 // Sections constants
372 
373 // Section indexes
374 #define SHN_UNDEF 0
375 #define SHN_LORESERVE 0xFF00
376 #define SHN_LOPROC 0xFF00
377 #define SHN_HIPROC 0xFF1F
378 #define SHN_LOOS 0xFF20
379 #define SHN_HIOS 0xFF3F
380 #define SHN_ABS 0xFFF1
381 #define SHN_COMMON 0xFFF2
382 #define SHN_XINDEX 0xFFFF
383 #define SHN_HIRESERVE 0xFFFF
384 
385 // Section types
386 #define SHT_NULL 0
387 #define SHT_PROGBITS 1
388 #define SHT_SYMTAB 2
389 #define SHT_STRTAB 3
390 #define SHT_RELA 4
391 #define SHT_HASH 5
392 #define SHT_DYNAMIC 6
393 #define SHT_NOTE 7
394 #define SHT_NOBITS 8
395 #define SHT_REL 9
396 #define SHT_SHLIB 10
397 #define SHT_DYNSYM 11
398 #define SHT_INIT_ARRAY 14
399 #define SHT_FINI_ARRAY 15
400 #define SHT_PREINIT_ARRAY 16
401 #define SHT_GROUP 17
402 #define SHT_SYMTAB_SHNDX 18
403 #define SHT_LOOS 0x60000000
404 #define SHT_HIOS 0x6fffffff
405 #define SHT_LOPROC 0x70000000
406 #define SHT_HIPROC 0x7FFFFFFF
407 #define SHT_LOUSER 0x80000000
408 #define SHT_HIUSER 0xFFFFFFFF
409 
410 // Section attribute flags
411 #define SHF_WRITE 0x1
412 #define SHF_ALLOC 0x2
413 #define SHF_EXECINSTR 0x4
414 #define SHF_MERGE 0x10
415 #define SHF_STRINGS 0x20
416 #define SHF_INFO_LINK 0x40
417 #define SHF_LINK_ORDER 0x80
418 #define SHF_OS_NONCONFORMING 0x100
419 #define SHF_GROUP 0x200
420 #define SHF_TLS 0x400
421 #define SHF_MASKOS 0x0ff00000
422 #define SHF_MASKPROC 0xF0000000
423 
424 // Section group flags
425 #define GRP_COMDAT 0x1
426 #define GRP_MASKOS 0x0ff00000
427 #define GRP_MASKPROC 0xf0000000
428 
429 // Symbol binding
430 #define STB_LOCAL 0
431 #define STB_GLOBAL 1
432 #define STB_WEAK 2
433 #define STB_LOOS 10
434 #define STB_HIOS 12
435 #define STB_MULTIDEF 13
436 #define STB_LOPROC 13
437 #define STB_HIPROC 15
438 
439 // Symbol types
440 #define STT_NOTYPE 0
441 #define STT_OBJECT 1
442 #define STT_FUNC 2
443 #define STT_SECTION 3
444 #define STT_FILE 4
445 #define STT_COMMON 5
446 #define STT_TLS 6
447 #define STT_LOOS 10
448 #define STT_HIOS 12
449 #define STT_LOPROC 13
450 #define STT_HIPROC 15
451 
452 // Symbol visibility
453 #define STV_DEFAULT 0
454 #define STV_INTERNAL 1
455 #define STV_HIDDEN 2
456 #define STV_PROTECTED 3
457 
458 // Undefined name
459 #define STN_UNDEF 0
460 
461 // Relocation types
462 #define R_386_NONE 0
463 #define R_X86_64_NONE 0
464 #define R_386_32 1
465 #define R_X86_64_64 1
466 #define R_386_PC32 2
467 #define R_X86_64_PC32 2
468 #define R_386_GOT32 3
469 #define R_X86_64_GOT32 3
470 #define R_386_PLT32 4
471 #define R_X86_64_PLT32 4
472 #define R_386_COPY 5
473 #define R_X86_64_COPY 5
474 #define R_386_GLOB_DAT 6
475 #define R_X86_64_GLOB_DAT 6
476 #define R_386_JMP_SLOT 7
477 #define R_X86_64_JUMP_SLOT 7
478 #define R_386_RELATIVE 8
479 #define R_X86_64_RELATIVE 8
480 #define R_386_GOTOFF 9
481 #define R_X86_64_GOTPCREL 9
482 #define R_386_GOTPC 10
483 #define R_X86_64_32 10
484 #define R_X86_64_32S 11
485 #define R_X86_64_16 12
486 #define R_X86_64_PC16 13
487 #define R_X86_64_8 14
488 #define R_X86_64_PC8 15
489 #define R_X86_64_DTPMOD64 16
490 #define R_X86_64_DTPOFF64 17
491 #define R_X86_64_TPOFF64 18
492 #define R_X86_64_TLSGD 19
493 #define R_X86_64_TLSLD 20
494 #define R_X86_64_DTPOFF32 21
495 #define R_X86_64_GOTTPOFF 22
496 #define R_X86_64_TPOFF32 23
497 #define R_X86_64_PC64 24
498 #define R_X86_64_GOTOFF64 25
499 #define R_X86_64_GOTPC32 26
500 #define R_X86_64_GOT64 27
501 #define R_X86_64_GOTPCREL64 28
502 #define R_X86_64_GOTPC64 29
503 #define R_X86_64_GOTPLT64 30
504 #define R_X86_64_PLTOFF64 31
505 #define R_X86_64_GOTPC32_TLSDESC 34
506 #define R_X86_64_TLSDESC_CALL 35
507 #define R_X86_64_TLSDESC 36
508 #define R_X86_64_IRELATIVE 37
509 #define R_X86_64_GNU_VTINHERIT 250
510 #define R_X86_64_GNU_VTENTRY 251
511 
512 // Segment types
513 #define PT_NULL 0
514 #define PT_LOAD 1
515 #define PT_DYNAMIC 2
516 #define PT_INTERP 3
517 #define PT_NOTE 4
518 #define PT_SHLIB 5
519 #define PT_PHDR 6
520 #define PT_TLS 7
521 #define PT_LOOS 0x60000000
522 #define PT_HIOS 0x6fffffff
523 #define PT_LOPROC 0x70000000
524 #define PT_HIPROC 0x7FFFFFFF
525 
526 // Segment flags
527 #define PF_X 1 // Execute
528 #define PF_W 2 // Write
529 #define PF_R 4 // Read
530 #define PF_MASKOS 0x0ff00000 // Unspecified
531 #define PF_MASKPROC 0xf0000000 // Unspecified
532 
533 // Dynamic Array Tags
534 #define DT_NULL 0
535 #define DT_NEEDED 1
536 #define DT_PLTRELSZ 2
537 #define DT_PLTGOT 3
538 #define DT_HASH 4
539 #define DT_STRTAB 5
540 #define DT_SYMTAB 6
541 #define DT_RELA 7
542 #define DT_RELASZ 8
543 #define DT_RELAENT 9
544 #define DT_STRSZ 10
545 #define DT_SYMENT 11
546 #define DT_INIT 12
547 #define DT_FINI 13
548 #define DT_SONAME 14
549 #define DT_RPATH 15
550 #define DT_SYMBOLIC 16
551 #define DT_REL 17
552 #define DT_RELSZ 18
553 #define DT_RELENT 19
554 #define DT_PLTREL 20
555 #define DT_DEBUG 21
556 #define DT_TEXTREL 22
557 #define DT_JMPREL 23
558 #define DT_BIND_NOW 24
559 #define DT_INIT_ARRAY 25
560 #define DT_FINI_ARRAY 26
561 #define DT_INIT_ARRAYSZ 27
562 #define DT_FINI_ARRAYSZ 28
563 #define DT_RUNPATH 29
564 #define DT_FLAGS 30
565 #define DT_ENCODING 32
566 #define DT_PREINIT_ARRAY 32
567 #define DT_PREINIT_ARRAYSZ 33
568 #define DT_MAXPOSTAGS 34
569 #define DT_LOOS 0x6000000D
570 #define DT_HIOS 0x6ffff000
571 #define DT_LOPROC 0x70000000
572 #define DT_HIPROC 0x7FFFFFFF
573 
574 // DT_FLAGS values
575 #define DF_ORIGIN 0x1
576 #define DF_SYMBOLIC 0x2
577 #define DF_TEXTREL 0x4
578 #define DF_BIND_NOW 0x8
579 #define DF_STATIC_TLS 0x10
580 
581 
582 // ELF file header
583 struct Elf32_Ehdr {
584  unsigned char e_ident[EI_NIDENT];
585  Elf_Half e_type;
586  Elf_Half e_machine;
587  Elf_Word e_version;
588  Elf32_Addr e_entry;
589  Elf32_Off e_phoff;
590  Elf32_Off e_shoff;
591  Elf_Word e_flags;
592  Elf_Half e_ehsize;
593  Elf_Half e_phentsize;
594  Elf_Half e_phnum;
595  Elf_Half e_shentsize;
596  Elf_Half e_shnum;
597  Elf_Half e_shstrndx;
598 };
599 
600 struct Elf64_Ehdr {
601  unsigned char e_ident[EI_NIDENT];
602  Elf_Half e_type;
603  Elf_Half e_machine;
604  Elf_Word e_version;
605  Elf64_Addr e_entry;
606  Elf64_Off e_phoff;
607  Elf64_Off e_shoff;
608  Elf_Word e_flags;
609  Elf_Half e_ehsize;
610  Elf_Half e_phentsize;
611  Elf_Half e_phnum;
612  Elf_Half e_shentsize;
613  Elf_Half e_shnum;
614  Elf_Half e_shstrndx;
615 };
616 
617 
618 // Section header
619 struct Elf32_Shdr {
620  Elf_Word sh_name;
621  Elf_Word sh_type;
622  Elf_Word sh_flags;
623  Elf32_Addr sh_addr;
624  Elf32_Off sh_offset;
625  Elf_Word sh_size;
626  Elf_Word sh_link;
627  Elf_Word sh_info;
628  Elf_Word sh_addralign;
629  Elf_Word sh_entsize;
630 };
631 
632 struct Elf64_Shdr {
633  Elf_Word sh_name;
634  Elf_Word sh_type;
635  Elf_Xword sh_flags;
636  Elf64_Addr sh_addr;
637  Elf64_Off sh_offset;
638  Elf_Xword sh_size;
639  Elf_Word sh_link;
640  Elf_Word sh_info;
641  Elf_Xword sh_addralign;
642  Elf_Xword sh_entsize;
643 };
644 
645 
646 // Segment header
647 struct Elf32_Phdr {
648  Elf_Word p_type;
649  Elf32_Off p_offset;
650  Elf32_Addr p_vaddr;
651  Elf32_Addr p_paddr;
652  Elf_Word p_filesz;
653  Elf_Word p_memsz;
654  Elf_Word p_flags;
655  Elf_Word p_align;
656 };
657 
658 struct Elf64_Phdr {
659  Elf_Word p_type;
660  Elf_Word p_flags;
661  Elf64_Off p_offset;
662  Elf64_Addr p_vaddr;
663  Elf64_Addr p_paddr;
664  Elf_Xword p_filesz;
665  Elf_Xword p_memsz;
666  Elf_Xword p_align;
667 };
668 
669 
670 // Symbol table entry
671 struct Elf32_Sym {
672  Elf_Word st_name;
673  Elf32_Addr st_value;
674  Elf_Word st_size;
675  unsigned char st_info;
676  unsigned char st_other;
677  Elf_Half st_shndx;
678 };
679 
680 struct Elf64_Sym {
681  Elf_Word st_name;
682  unsigned char st_info;
683  unsigned char st_other;
684  Elf_Half st_shndx;
685  Elf64_Addr st_value;
686  Elf_Xword st_size;
687 };
688 
689 
690 #define ELF_ST_BIND(i) ((i) >> 4)
691 #define ELF_ST_TYPE(i) ((i)&0xf)
692 #define ELF_ST_INFO(b, t) (((b) << 4) + ((t)&0xf))
693 
694 #define ELF_ST_VISIBILITY(o) ((o)&0x3)
695 
696 
697 // Relocation entries
698 struct Elf32_Rel {
699  Elf32_Addr r_offset;
700  Elf_Word r_info;
701 };
702 
703 struct Elf32_Rela {
704  Elf32_Addr r_offset;
705  Elf_Word r_info;
706  Elf_Sword r_addend;
707 };
708 
709 struct Elf64_Rel {
710  Elf64_Addr r_offset;
711  Elf_Xword r_info;
712 };
713 
714 struct Elf64_Rela {
715  Elf64_Addr r_offset;
716  Elf_Xword r_info;
717  Elf_Sxword r_addend;
718 };
719 
720 
721 #define ELF32_R_SYM(i) ((i) >> 8)
722 #define ELF32_R_TYPE(i) ((unsigned char)(i))
723 #define ELF32_R_INFO(s, t) (((s) << 8) + (unsigned char)(t))
724 
725 #define ELF64_R_SYM(i) ((i) >> 32)
726 #define ELF64_R_TYPE(i) ((i)&0xffffffffL)
727 #define ELF64_R_INFO(s, t) ((((int64_t)s) << 32) + ((t)&0xffffffffL))
728 
729 // Dynamic structure
730 struct Elf32_Dyn {
731  Elf_Sword d_tag;
732  union {
733  Elf_Word d_val;
734  Elf32_Addr d_ptr;
735  } d_un;
736 };
737 
738 struct Elf64_Dyn {
739  Elf_Sxword d_tag;
740  union {
741  Elf_Xword d_val;
742  Elf64_Addr d_ptr;
743  } d_un;
744 };
745 
746 } // namespace ELFIO
747 
748 #endif // ELFTYPES_H
ELFIO::Elf64_Phdr
Definition: elf_types.hpp:658
ELFIO::Elf64_Sym
Definition: elf_types.hpp:680
ELFIO::Elf64_Shdr
Definition: elf_types.hpp:632
ELFIO::Elf64_Ehdr
Definition: elf_types.hpp:600
ELFIO::Elf64_Rel
Definition: elf_types.hpp:709
ELFIO::Elf32_Sym
Definition: elf_types.hpp:671
ELFIO::Elf64_Rela
Definition: elf_types.hpp:714
ELFIO::Elf32_Rela
Definition: elf_types.hpp:703
ELFIO::Elf32_Phdr
Definition: elf_types.hpp:647
ELFIO::Elf32_Shdr
Definition: elf_types.hpp:619
ELFIO::Elf32_Ehdr
Definition: elf_types.hpp:583
ELFIO::Elf32_Dyn
Definition: elf_types.hpp:730
ELFIO::Elf64_Dyn
Definition: elf_types.hpp:738
ELFIO::Elf32_Rel
Definition: elf_types.hpp:698