]> pd.if.org Git - zpackage/blob - elf/elf.h
add better error reporting for invalid import file types
[zpackage] / elf / elf.h
1 #ifndef ELF_H_
2 #define ELF_H_ 1
3
4 #include <stdint.h>
5
6 typedef uint32_t Elf32_Addr;
7 typedef uint32_t Elf32_Off;
8 typedef uint16_t Elf32_Half;
9 typedef uint32_t Elf32_Word;
10 typedef int32_t Elf32_Sword;
11
12 typedef uint64_t Elf64_Addr;
13 typedef uint64_t Elf64_Off;
14 typedef uint16_t Elf64_Half;
15 typedef uint32_t Elf64_Word;
16 typedef int32_t Elf64_Sword;
17 typedef uint64_t Elf64_Xword;
18 typedef int64_t Elf64_Sxword;
19
20 #define EI_NIDENT 16
21
22 typedef struct {
23         unsigned char   e_ident[EI_NIDENT];
24         Elf32_Half      e_type;
25         Elf32_Half      e_machine;
26         Elf32_Word      e_version;
27         Elf32_Addr      e_entry;
28         Elf32_Off       e_phoff;
29         Elf32_Off       e_shoff;
30         Elf32_Word      e_flags;
31         Elf32_Half      e_ehsize;
32         Elf32_Half      e_phentsize;
33         Elf32_Half      e_phnum;
34         Elf32_Half      e_shentsize;
35         Elf32_Half      e_shnum;
36         Elf32_Half      e_shstrndx;
37 } Elf32_Ehdr;
38
39 typedef struct {
40         unsigned char   e_ident[EI_NIDENT];
41         Elf64_Half      e_type;
42         Elf64_Half      e_machine;
43         Elf64_Word      e_version;
44         Elf64_Addr      e_entry;
45         Elf64_Off       e_phoff;
46         Elf64_Off       e_shoff;
47         Elf64_Word      e_flags;
48         Elf64_Half      e_ehsize;
49         Elf64_Half      e_phentsize;
50         Elf64_Half      e_phnum;
51         Elf64_Half      e_shentsize;
52         Elf64_Half      e_shnum;
53         Elf64_Half      e_shstrndx;
54 } Elf64_Ehdr;
55
56
57 typedef struct {
58         Elf32_Word      sh_name;
59         Elf32_Word      sh_type;
60         Elf32_Word      sh_flags;
61         Elf32_Addr      sh_addr;
62         Elf32_Off       sh_offset;
63         Elf32_Word      sh_size;
64         Elf32_Word      sh_link;
65         Elf32_Word      sh_info;
66         Elf32_Word      sh_addralign;
67         Elf32_Word      sh_entsize;
68 } Elf32_Shdr;
69
70 typedef struct {
71         Elf64_Word      sh_name;
72         Elf64_Word      sh_type;
73         Elf64_Xword     sh_flags;
74         Elf64_Addr      sh_addr;
75         Elf64_Off       sh_offset;
76         Elf64_Xword     sh_size;
77         Elf64_Word      sh_link;
78         Elf64_Word      sh_info;
79         Elf64_Xword     sh_addralign;
80         Elf64_Xword     sh_entsize;
81 } Elf64_Shdr;
82
83 typedef struct {
84         Elf32_Word      ch_type;
85         Elf32_Word      ch_size;
86         Elf32_Word      ch_addralign;
87 } Elf32_Chdr;
88
89 typedef struct {
90         Elf64_Word      ch_type;
91         Elf64_Word      ch_reserved;
92         Elf64_Xword     ch_size;
93         Elf64_Xword     ch_addralign;
94 } Elf64_Chdr;
95
96 typedef struct {
97         Elf32_Word      st_name;
98         Elf32_Addr      st_value;
99         Elf32_Word      st_size;
100         unsigned char   st_info;
101         unsigned char   st_other;
102         Elf32_Half      st_shndx;
103 } Elf32_Sym;
104
105 typedef struct {
106         Elf64_Word      st_name;
107         unsigned char   st_info;
108         unsigned char   st_other;
109         Elf64_Half      st_shndx;
110         Elf64_Addr      st_value;
111         Elf64_Xword     st_size;
112 } Elf64_Sym;
113
114
115 typedef struct {
116         Elf32_Addr      r_offset;
117         Elf32_Word      r_info;
118 } Elf32_Rel;
119
120 typedef struct {
121         Elf32_Addr      r_offset;
122         Elf32_Word      r_info;
123         Elf32_Sword     r_addend;
124 } Elf32_Rela;
125
126 typedef struct {
127         Elf64_Addr      r_offset;
128         Elf64_Xword     r_info;
129 } Elf64_Rel;
130
131 typedef struct {
132         Elf64_Addr      r_offset;
133         Elf64_Xword     r_info;
134         Elf64_Sxword    r_addend;
135 } Elf64_Rela;
136
137 typedef struct {
138         Elf32_Sword     d_tag;
139         union {
140                 Elf32_Word      d_val;
141                 Elf32_Addr      d_ptr;
142         } d_un;
143 } Elf32_Dyn;
144
145 /* extern Elf32_Dyn     _DYNAMIC[]; */
146
147 typedef struct {
148         Elf64_Sxword    d_tag;
149         union {
150                 Elf64_Xword     d_val;
151                 Elf64_Addr      d_ptr;
152         } d_un;
153 } Elf64_Dyn;
154
155 /* extern Elf64_Dyn     _DYNAMIC[]; */
156
157 #define DT_NULL 0
158 #define DT_NEEDED 1
159 #define DT_PLTRELSZ 2
160 #define DT_PLTGOT 3
161 #define DT_HASH 4
162 #define DT_STRTAB 5
163 #define DT_SYMTAB 6
164 #define DT_RELA 7
165 #define DT_RELASZ 8
166 #define DT_RELAENT 9
167 #define DT_STRSZ 10
168 #define DT_SYMENT 11
169 #define DT_INIT 12
170 #define DT_FINI 13
171 #define DT_SONAME 14
172 #define DT_RPATH 15
173 #define DT_SYMBOLIC 16
174 #define DT_REL 17
175 #define DT_RELSZ 18
176 #define DT_RELENT 19
177 #define DT_PLTREL 20
178 #define DT_DEBUG 21
179 #define DT_TEXTREL 22
180 #define DT_JMPREL 23
181 #define DT_BIND_NOW 24
182 #define DT_INIT_ARRAY 25
183 #define DT_FINI_ARRAY 26
184 #define DT_INIT_ARRAYSZ 27
185 #define DT_FINI_ARRAYSZ 28
186 #define DT_RUNPATH 29
187 #define DT_FLAGS 30
188 #define DT_ENCODING 32
189 #define DT_PREINIT_ARRAY 32
190 #define DT_PREINIT_ARRAYSZ 33
191 #define DT_SYMTAB_SHNDX 34
192 #define DT_LOOS 0x6000000D
193 #define DT_HIOS 0x6ffff000
194 #define DT_LOPROC 0x70000000
195 #define DT_HIPROC 0x7fffffff
196
197 #define DF_ORIGIN       0x1
198 #define DF_SYMBOLIC     0x2
199 #define DF_TEXTREL      0x4
200 #define DF_BIND_NOW     0x8
201 #define DF_STATIC_TLS   0x10
202
203 #define ELF32_R_SYM(i)  ((i)>>8)
204 #define ELF32_R_TYPE(i)   ((unsigned char)(i))
205 #define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t))
206
207 #define ELF64_R_SYM(i)    ((i)>>32)
208 #define ELF64_R_TYPE(i)   ((i)&0xffffffffL)
209 #define ELF64_R_INFO(s,t) (((s)<<32)+((t)&0xffffffffL))
210
211 #define ELF32_ST_BIND(i)   ((i)>>4)
212 #define ELF32_ST_TYPE(i)   ((i)&0xf)
213 #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
214
215 #define ELF64_ST_BIND(i)   ((i)>>4)
216 #define ELF64_ST_TYPE(i)   ((i)&0xf)
217 #define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
218
219 #define ELF32_ST_VISIBILITY(o) ((o)&0x3)
220 #define ELF64_ST_VISIBILITY(o) ((o)&0x3)
221
222 #define STB_GLOBAL      1
223 #define STB_WEAK        2
224 #define STB_LOOS        10
225 #define STB_HIOS        12
226 #define STB_LOPROC      13
227 #define STB_HIPROC      15
228
229 #define STT_NOTYPE      0
230 #define STT_OBJECT      1
231 #define STT_FUNC        2
232 #define STT_SECTION     3
233 #define STT_FILE        4
234 #define STT_COMMON      5
235 #define STT_TLS 6
236 #define STT_LOOS        10
237 #define STT_HIOS        12
238 #define STT_LOPROC      13
239 #define STT_HIPROC      15
240
241 #define STV_DEFAULT     0
242 #define STV_INTERNAL    1
243 #define STV_HIDDEN      2
244 #define STV_PROTECTED   3
245
246 #define GRP_COMDAT      0x1
247 #define GRP_MASKOS      0x0ff00000
248 #define GRP_MASKPROC    0xf0000000
249
250 #define ELFCOMPRESS_ZLIB        1
251 #define ELFCOMPRESS_LOOS        0x60000000
252 #define ELFCOMPRESS_HIOS        0x6fffffff
253 #define ELFCOMPRESS_LOPROC      0x70000000
254 #define ELFCOMPRESS_HIPROC      0x7fffffff
255
256 #define SHT_NULL        0
257 #define SHT_PROGBITS    1
258 #define SHT_SYMTAB      2
259 #define SHT_STRTAB      3
260 #define SHT_RELA        4
261 #define SHT_HASH        5
262 #define SHT_DYNAMIC     6
263 #define SHT_NOTE        7
264 #define SHT_NOBITS      8
265 #define SHT_REL 9
266 #define SHT_SHLIB       10
267 #define SHT_DYNSYM      11
268 #define SHT_INIT_ARRAY  14
269 #define SHT_FINI_ARRAY  15
270 #define SHT_PREINIT_ARRAY       16
271 #define SHT_GROUP       17
272 #define SHT_SYMTAB_SHNDX        18
273 #define SHT_LOOS        0x60000000
274 #define SHT_HIOS        0x6fffffff
275 #define SHT_LOPROC      0x70000000
276 #define SHT_HIPROC      0x7fffffff
277 #define SHT_LOUSER      0x80000000
278 #define SHT_HIUSER      0xffffffff
279
280 #define SHF_WRITE       0x1
281 #define SHF_ALLOC       0x2
282 #define SHF_EXECINSTR   0x4
283 #define SHF_MERGE       0x10
284 #define SHF_STRINGS     0x20
285 #define SHF_INFO_LINK   0x40
286 #define SHF_LINK_ORDER  0x80
287 #define SHF_OS_NONCONFORMING    0x100
288 #define SHF_GROUP       0x200
289 #define SHF_TLS 0x400
290 #define SHF_COMPRESSED  0x800
291 #define SHF_MASKOS      0x0ff00000
292 #define SHF_MASKPROC    0xf0000000
293
294 #define SHN_UNDEF       0
295 #define SHN_LORESERVE   0xff00
296 #define SHN_LOPROC      0xff00
297 #define SHN_HIPROC      0xff1f
298 #define SHN_LOOS        0xff20
299 #define SHN_HIOS        0xff3f
300 #define SHN_ABS 0xfff1
301 #define SHN_COMMON      0xfff2
302 #define SHN_XINDEX      0xffff
303 #define SHN_HIRESERVE   0xffff
304
305 #define ET_NONE 0
306 #define ET_REL 1
307 #define ET_EXEC 2
308 #define ET_DYN 3
309 #define ET_CORE 4
310 #define ET_LOOS 0xfe00
311 #define ET_HIOS 0xfeff
312 #define ET_LOPROC 0xff00
313 #define ET_HIPROC 0xffff
314
315 #define EM_NONE 0
316 #define EM_M32 1
317 #define EM_SPARC 2
318 #define EM_386 3
319 #define EM_68K 4
320 #define EM_88K 5
321 #define EM_IAMCU 6
322 #define EM_860 7
323 #define EM_MIPS 8
324 #define EM_S370 9
325 #define EM_MIPS_RS3_LE 10
326 #define EM_PARISC 15
327 #define EM_VPP500 17
328 #define EM_SPARC32PLUS 18
329 #define EM_960 19
330 #define EM_PPC 20
331 #define EM_PPC64 21
332 #define EM_S390 22
333 #define EM_SPU 23
334 #define EM_V800 36
335 #define EM_FR20 37
336 #define EM_RH32 38
337 #define EM_RCE 39
338 #define EM_ARM 40
339 #define EM_ALPHA 41
340 #define EM_SH 42
341 #define EM_SPARCV9 43
342 #define EM_TRICORE 44
343 #define EM_ARC 45
344 #define EM_H8_300 46
345 #define EM_H8_300H 47
346 #define EM_H8S 48
347 #define EM_H8_500 49
348 #define EM_IA_64 50
349 #define EM_MIPS_X 51
350 #define EM_COLDFIRE 52
351 #define EM_68HC12 53
352 #define EM_MMA 54
353 #define EM_PCP 55
354 #define EM_NCPU 56
355 #define EM_NDR1 57
356 #define EM_STARCORE 58
357 #define EM_ME16 59
358 #define EM_ST100 60
359 #define EM_TINYJ 61
360 #define EM_X86_64 62
361 #define EM_PDSP 63
362 #define EM_PDP10 64
363 #define EM_PDP11 65
364 #define EM_FX66 66
365 #define EM_ST9PLUS 67
366 #define EM_ST7 68
367 #define EM_68HC16 69
368 #define EM_68HC11 70
369 #define EM_68HC08 71
370 #define EM_68HC05 72
371 #define EM_SVX 73
372 #define EM_ST19 74
373 #define EM_VAX 75
374 #define EM_CRIS 76
375 #define EM_JAVELIN 77
376 #define EM_FIREPATH 78
377 #define EM_ZSP 79
378 #define EM_MMIX 80
379 #define EM_HUANY 81
380 #define EM_PRISM 82
381 #define EM_AVR 83
382 #define EM_FR30 84
383 #define EM_D10V 85
384 #define EM_D30V 86
385 #define EM_V850 87
386 #define EM_M32R 88
387 #define EM_MN10300 89
388 #define EM_MN10200 90
389 #define EM_PJ 91
390 #define EM_OPENRISC 92
391 #define EM_ARC_COMPACT 93
392 #define EM_XTENSA 94
393 #define EM_VIDEOCORE 95
394 #define EM_TMM_GPP 96
395 #define EM_NS32K 97
396 #define EM_TPC 98
397 #define EM_SNP1K 99
398 #define EM_ST200 100
399 #define EM_IP2K 101
400 #define EM_MAX 102
401 #define EM_CR 103
402 #define EM_F2MC16 104
403 #define EM_MSP430 105
404 #define EM_BLACKFIN 106
405 #define EM_SE_C33 107
406 #define EM_SEP 108
407 #define EM_ARCA 109
408 #define EM_UNICORE 110
409 #define EM_EXCESS 111
410 #define EM_DXP 112
411 #define EM_ALTERA_NIOS2 113
412 #define EM_CRX 114
413 #define EM_XGATE 115
414 #define EM_C166 116
415 #define EM_M16C 117
416 #define EM_DSPIC30F 118
417 #define EM_CE 119
418 #define EM_M32C 120
419 #define EM_TSK3000 131
420 #define EM_RS08 132
421 #define EM_SHARC 133
422 #define EM_ECOG2 134
423 #define EM_SCORE7 135
424 #define EM_DSP24 136
425 #define EM_VIDEOCORE3 137
426 #define EM_LATTICEMICO32 138
427 #define EM_SE_C17 139
428 #define EM_TI_C6000 140
429 #define EM_TI_C2000 141
430 #define EM_TI_C5500 142
431 #define EM_TI_ARP32 143
432 #define EM_TI_PRU 144
433 #define EM_MMDSP_PLUS 160
434 #define EM_MMDSP_PLUS 160
435 #define EM_CYPRESS_M8C 161
436 #define EM_R32C 162
437 #define EM_TRIMEDIA 163
438 #define EM_QDSP6 164
439 #define EM_8051 165
440 #define EM_STXP7X 166
441 #define EM_NDS32 167
442 #define EM_ECOG1 168
443 #define EM_ECOG1X 168
444 #define EM_MAXQ30 169
445 #define EM_XIMO16 170
446 #define EM_MANIK 171
447 #define EM_CRAYNV2 172
448 #define EM_RX 173
449 #define EM_METAG 174
450 #define EM_MCST_ELBRUS 175
451 #define EM_ECOG16 176
452 #define EM_CR16 177
453 #define EM_ETPU 178
454 #define EM_SLE9X 179
455 #define EM_L10M 180
456 #define EM_K10M 181
457 #define EM_AARCH64      183
458 #define EM_AVR32        185
459 #define EM_STM8 186
460 #define EM_TILE64       187
461 #define EM_TILEPRO      188
462 #define EM_MICROBLAZE   189
463 #define EM_CUDA 190
464 #define EM_TILEGX       191
465 #define EM_CLOUDSHIELD  192
466 #define EM_COREA_1ST    193
467 #define EM_COREA_2ND    194
468 #define EM_ARC_COMPACT2 195
469 #define EM_OPEN8        196
470 #define EM_RL78 197
471 #define EM_VIDEOCORE5   198
472 #define EM_78KOR        199
473 #define EM_56800EX      200
474 #define EM_BA1  201
475 #define EM_BA2  202
476 #define EM_XCORE        203
477 #define EM_MCHP_PIC     204
478 #define EM_INTEL205     205
479 #define EM_INTEL206     206
480 #define EM_INTEL207     207
481 #define EM_INTEL208     208
482 #define EM_INTEL209     209
483 #define EM_KM32 210
484 #define EM_KMX32        211
485 #define EM_KMX16        212
486 #define EM_KMX8 213
487 #define EM_KVARC        214
488 #define EM_CDP  215
489 #define EM_COGE 216
490 #define EM_COOL 217
491 #define EM_NORC 218
492 #define EM_CSR_KALIMBA  219
493 #define EM_Z80  220
494 #define EM_VISIUM       221
495 #define EM_FT32 222
496 #define EM_MOXIE        223
497 #define EM_AMDGPU       224
498 #define EM_RISCV        243
499
500 #define EV_NONE 0
501 #define EV_CURRENT      1
502
503 #define EI_MAG0 0
504 #define EI_MAG1 1
505 #define EI_MAG2 2
506 #define EI_MAG3 3
507 #define EI_CLASS        4
508 #define EI_DATA 5
509 #define EI_VERSION      6
510 #define EI_OSABI        7
511 #define EI_ABIVERSION   8
512 #define EI_PAD  9
513 #define EI_NIDENT       16
514
515 #define ELFMAG0 0x7f
516 #define ELFMAG1 'E'
517 #define ELFMAG2 'L'
518 #define ELFMAG3 'F'
519
520 #define ELFCLASSNONE    0
521 #define ELFCLASS32      1
522 #define ELFCLASS64      2
523
524 #define ELFDATANONE     0
525 #define ELFDATA2LSB     1
526 #define ELFDATA2MSB     2
527
528 #define ELFOSABI_NONE   0
529 #define ELFOSABI_HPUX   1
530 #define ELFOSABI_NETBSD 2
531 #define ELFOSABI_GNU    3
532 #define ELFOSABI_LINUX 3
533 #define ELFOSABI_SOLARIS        6
534 #define ELFOSABI_AIX    7
535 #define ELFOSABI_IRIX   8
536 #define ELFOSABI_FREEBSD        9
537 #define ELFOSABI_TRU64  10
538 #define ELFOSABI_MODESTO        11
539 #define ELFOSABI_OPENBSD        12
540 #define ELFOSABI_OPENVMS        13
541 #define ELFOSABI_NSK    14
542 #define ELFOSABI_AROS   15
543 #define ELFOSABI_FENIXOS        16
544 #define ELFOSABI_CLOUDABI       17
545 #define ELFOSABI_OPENVOS        18
546
547 #endif