xref: /relibc/src/header/elf/mod.rs (revision e14b3e09a5ac91bf7de9a58873ad4f1da3c52aa3)
1 use crate::platform::types::*;
2 
3 pub type Elf32_Half = uint16_t;
4 pub type Elf64_Half = uint16_t;
5 
6 pub type Elf32_Word = uint32_t;
7 pub type Elf32_Sword = int32_t;
8 pub type Elf64_Word = uint64_t;
9 pub type Elf64_Sword = int64_t;
10 
11 pub type Elf32_Xword = uint64_t;
12 pub type Elf32_Sxword = int64_t;
13 pub type Elf64_Xword = uint64_t;
14 pub type Elf64_Sxword = int64_t;
15 
16 pub type Elf32_Addr = uint32_t;
17 pub type Elf64_Addr = uint64_t;
18 
19 pub type Elf32_Off = uint32_t;
20 pub type Elf64_Off = uint64_t;
21 
22 pub type Elf32_Section = uint16_t;
23 pub type Elf64_Section = uint16_t;
24 
25 pub type Elf32_Versym = Elf32_Half;
26 pub type Elf64_Versym = Elf64_Half;
27 
28 pub const EI_NIDENT: usize = 16;
29 
30 #[repr(C)]
31 pub struct Elf32_Ehdr {
32     pub e_ident: [c_uchar; EI_NIDENT],
33     pub e_type: Elf32_Half,
34     pub e_machine: Elf32_Half,
35     pub e_version: Elf32_Word,
36     pub e_entry: Elf32_Addr,
37     pub e_phoff: Elf32_Off,
38     pub e_shoff: Elf32_Off,
39     pub e_flags: Elf32_Word,
40     pub e_ehsize: Elf32_Half,
41     pub e_phentsize: Elf32_Half,
42     pub e_phnum: Elf32_Half,
43     pub e_shentsize: Elf32_Half,
44     pub e_shnum: Elf32_Half,
45     pub e_shstrndx: Elf32_Half,
46 }
47 
48 #[repr(C)]
49 pub struct Elf64_Ehdr {
50     pub e_ident: [c_uchar; EI_NIDENT],
51     pub e_type: Elf64_Half,
52     pub e_machine: Elf64_Half,
53     pub e_version: Elf64_Word,
54     pub e_entry: Elf64_Addr,
55     pub e_phoff: Elf64_Off,
56     pub e_shoff: Elf64_Off,
57     pub e_flags: Elf64_Word,
58     pub e_ehsize: Elf64_Half,
59     pub e_phentsize: Elf64_Half,
60     pub e_phnum: Elf64_Half,
61     pub e_shentsize: Elf64_Half,
62     pub e_shnum: Elf64_Half,
63     pub e_shstrndx: Elf64_Half,
64 }
65 
66 pub const EI_MAG0: usize = 0;
67 pub const ELFMAG0: usize = 0x7f;
68 pub const EI_MAG1: usize = 1;
69 pub const ELFMAG1: c_char = 'E' as c_char;
70 pub const EI_MAG2: usize = 2;
71 pub const ELFMAG2: c_char = 'L' as c_char;
72 pub const EI_MAG3: usize = 3;
73 pub const ELFMAG3: c_char = 'F' as c_char;
74 pub const ELFMAG: &'static str = "\x7fELF";
75 pub const SELFMAG: usize = 4;
76 pub const EI_CLASS: usize = 4;
77 pub const ELFCLASSNONE: usize = 0;
78 pub const ELFCLASS32: usize = 1;
79 pub const ELFCLASS64: usize = 2;
80 pub const ELFCLASSNUM: usize = 3;
81 pub const EI_DATA: usize = 5;
82 pub const ELFDATANONE: usize = 0;
83 pub const ELFDATA2LSB: usize = 1;
84 pub const ELFDATA2MSB: usize = 2;
85 pub const ELFDATANUM: usize = 3;
86 pub const EI_VERSION: usize = 6;
87 pub const EI_OSABI: usize = 7;
88 pub const ELFOSABI_NONE: usize = 0;
89 pub const ELFOSABI_SYSV: usize = 0;
90 pub const ELFOSABI_HPUX: usize = 1;
91 pub const ELFOSABI_NETBSD: usize = 2;
92 pub const ELFOSABI_LINUX: usize = 3;
93 pub const ELFOSABI_GNU: usize = 3;
94 pub const ELFOSABI_SOLARIS: usize = 6;
95 pub const ELFOSABI_AIX: usize = 7;
96 pub const ELFOSABI_IRIX: usize = 8;
97 pub const ELFOSABI_FREEBSD: usize = 9;
98 pub const ELFOSABI_TRU64: usize = 10;
99 pub const ELFOSABI_MODESTO: usize = 11;
100 pub const ELFOSABI_OPENBSD: usize = 12;
101 pub const ELFOSABI_ARM: usize = 97;
102 pub const ELFOSABI_STANDALONE: usize = 255;
103 pub const EI_ABIVERSION: usize = 8;
104 pub const EI_PAD: usize = 9;
105 pub const ET_NONE: usize = 0;
106 pub const ET_REL: usize = 1;
107 pub const ET_EXEC: usize = 2;
108 pub const ET_DYN: usize = 3;
109 pub const ET_CORE: usize = 4;
110 pub const ET_NUM: usize = 5;
111 pub const ET_LOOS: usize = 0xfe00;
112 pub const ET_HIOS: usize = 0xfeff;
113 pub const ET_LOPROC: usize = 0xff00;
114 pub const ET_HIPROC: usize = 0xffff;
115 pub const EM_NONE: usize = 0;
116 pub const EM_M32: usize = 1;
117 pub const EM_SPARC: usize = 2;
118 pub const EM_386: usize = 3;
119 pub const EM_68K: usize = 4;
120 pub const EM_88K: usize = 5;
121 pub const EM_860: usize = 7;
122 pub const EM_MIPS: usize = 8;
123 pub const EM_S370: usize = 9;
124 pub const EM_MIPS_RS3_LE: usize = 10;
125 pub const EM_PARISC: usize = 15;
126 pub const EM_VPP500: usize = 17;
127 pub const EM_SPARC32PLUS: usize = 18;
128 pub const EM_960: usize = 19;
129 pub const EM_PPC: usize = 20;
130 pub const EM_PPC64: usize = 21;
131 pub const EM_S390: usize = 22;
132 pub const EM_V800: usize = 36;
133 pub const EM_FR20: usize = 37;
134 pub const EM_RH32: usize = 38;
135 pub const EM_RCE: usize = 39;
136 pub const EM_ARM: usize = 40;
137 pub const EM_FAKE_ALPHA: usize = 41;
138 pub const EM_SH: usize = 42;
139 pub const EM_SPARCV9: usize = 43;
140 pub const EM_TRICORE: usize = 44;
141 pub const EM_ARC: usize = 45;
142 pub const EM_H8_300: usize = 46;
143 pub const EM_H8_300H: usize = 47;
144 pub const EM_H8S: usize = 48;
145 pub const EM_H8_500: usize = 49;
146 pub const EM_IA_64: usize = 50;
147 pub const EM_MIPS_X: usize = 51;
148 pub const EM_COLDFIRE: usize = 52;
149 pub const EM_68HC12: usize = 53;
150 pub const EM_MMA: usize = 54;
151 pub const EM_PCP: usize = 55;
152 pub const EM_NCPU: usize = 56;
153 pub const EM_NDR1: usize = 57;
154 pub const EM_STARCORE: usize = 58;
155 pub const EM_ME16: usize = 59;
156 pub const EM_ST100: usize = 60;
157 pub const EM_TINYJ: usize = 61;
158 pub const EM_X86_64: usize = 62;
159 pub const EM_PDSP: usize = 63;
160 pub const EM_FX66: usize = 66;
161 pub const EM_ST9PLUS: usize = 67;
162 pub const EM_ST7: usize = 68;
163 pub const EM_68HC16: usize = 69;
164 pub const EM_68HC11: usize = 70;
165 pub const EM_68HC08: usize = 71;
166 pub const EM_68HC05: usize = 72;
167 pub const EM_SVX: usize = 73;
168 pub const EM_ST19: usize = 74;
169 pub const EM_VAX: usize = 75;
170 pub const EM_CRIS: usize = 76;
171 pub const EM_JAVELIN: usize = 77;
172 pub const EM_FIREPATH: usize = 78;
173 pub const EM_ZSP: usize = 79;
174 pub const EM_MMIX: usize = 80;
175 pub const EM_HUANY: usize = 81;
176 pub const EM_PRISM: usize = 82;
177 pub const EM_AVR: usize = 83;
178 pub const EM_FR30: usize = 84;
179 pub const EM_D10V: usize = 85;
180 pub const EM_D30V: usize = 86;
181 pub const EM_V850: usize = 87;
182 pub const EM_M32R: usize = 88;
183 pub const EM_MN10300: usize = 89;
184 pub const EM_MN10200: usize = 90;
185 pub const EM_PJ: usize = 91;
186 pub const EM_OR1K: usize = 92;
187 pub const EM_ARC_A5: usize = 93;
188 pub const EM_XTENSA: usize = 94;
189 pub const EM_AARCH64: usize = 183;
190 pub const EM_TILEPRO: usize = 188;
191 pub const EM_MICROBLAZE: usize = 189;
192 pub const EM_TILEGX: usize = 191;
193 pub const EM_NUM: usize = 192;
194 pub const EM_ALPHA: usize = 0x9026;
195 pub const EV_NONE: usize = 0;
196 pub const EV_CURRENT: usize = 1;
197 pub const EV_NUM: usize = 2;
198 
199 #[repr(C)]
200 pub struct Elf32_Shdr {
201     pub sh_name: Elf32_Word,
202     pub sh_type: Elf32_Word,
203     pub sh_flags: Elf32_Word,
204     pub sh_addr: Elf32_Addr,
205     pub sh_offset: Elf32_Off,
206     pub sh_size: Elf32_Word,
207     pub sh_link: Elf32_Word,
208     pub sh_info: Elf32_Word,
209     pub sh_addralign: Elf32_Word,
210     pub sh_entsize: Elf32_Word,
211 }
212 
213 #[repr(C)]
214 pub struct Elf64_Shdr {
215     pub sh_name: Elf64_Word,
216     pub sh_type: Elf64_Word,
217     pub sh_flags: Elf64_Xword,
218     pub sh_addr: Elf64_Addr,
219     pub sh_offset: Elf64_Off,
220     pub sh_size: Elf64_Xword,
221     pub sh_link: Elf64_Word,
222     pub sh_info: Elf64_Word,
223     pub sh_addralign: Elf64_Xword,
224     pub sh_entsize: Elf64_Xword,
225 }
226 
227 pub const SHN_UNDEF: usize = 0;
228 pub const SHN_LORESERVE: usize = 0xff00;
229 pub const SHN_LOPROC: usize = 0xff00;
230 pub const SHN_BEFORE: usize = 0xff00;
231 pub const SHN_AFTER: usize = 0xff01;
232 pub const SHN_HIPROC: usize = 0xff1f;
233 pub const SHN_LOOS: usize = 0xff20;
234 pub const SHN_HIOS: usize = 0xff3f;
235 pub const SHN_ABS: usize = 0xfff1;
236 pub const SHN_COMMON: usize = 0xfff2;
237 pub const SHN_XINDEX: usize = 0xffff;
238 pub const SHN_HIRESERVE: usize = 0xffff;
239 pub const SHT_NULL: usize = 0;
240 pub const SHT_PROGBITS: usize = 1;
241 pub const SHT_SYMTAB: usize = 2;
242 pub const SHT_STRTAB: usize = 3;
243 pub const SHT_RELA: usize = 4;
244 pub const SHT_HASH: usize = 5;
245 pub const SHT_DYNAMIC: usize = 6;
246 pub const SHT_NOTE: usize = 7;
247 pub const SHT_NOBITS: usize = 8;
248 pub const SHT_REL: usize = 9;
249 pub const SHT_SHLIB: usize = 10;
250 pub const SHT_DYNSYM: usize = 11;
251 pub const SHT_INIT_ARRAY: usize = 14;
252 pub const SHT_FINI_ARRAY: usize = 15;
253 pub const SHT_PREINIT_ARRAY: usize = 16;
254 pub const SHT_GROUP: usize = 17;
255 pub const SHT_SYMTAB_SHNDX: usize = 18;
256 pub const SHT_NUM: usize = 19;
257 pub const SHT_LOOS: usize = 0x60000000;
258 pub const SHT_GNU_ATTRIBUTES: usize = 0x6ffffff5;
259 pub const SHT_GNU_HASH: usize = 0x6ffffff6;
260 pub const SHT_GNU_LIBLIST: usize = 0x6ffffff7;
261 pub const SHT_CHECKSUM: usize = 0x6ffffff8;
262 pub const SHT_LOSUNW: usize = 0x6ffffffa;
263 pub const SHT_SUNW_move: usize = 0x6ffffffa;
264 pub const SHT_SUNW_COMDAT: usize = 0x6ffffffb;
265 pub const SHT_SUNW_syminfo: usize = 0x6ffffffc;
266 pub const SHT_GNU_verdef: usize = 0x6ffffffd;
267 pub const SHT_GNU_verneed: usize = 0x6ffffffe;
268 pub const SHT_GNU_versym: usize = 0x6fffffff;
269 pub const SHT_HISUNW: usize = 0x6fffffff;
270 pub const SHT_HIOS: usize = 0x6fffffff;
271 pub const SHT_LOPROC: usize = 0x70000000;
272 pub const SHT_HIPROC: usize = 0x7fffffff;
273 pub const SHT_LOUSER: usize = 0x80000000;
274 pub const SHT_HIUSER: usize = 0x8fffffff;
275 
276 pub const SHF_WRITE: usize = (1 << 0);
277 pub const SHF_ALLOC: usize = (1 << 1);
278 pub const SHF_EXECINSTR: usize = (1 << 2);
279 pub const SHF_MERGE: usize = (1 << 4);
280 pub const SHF_STRINGS: usize = (1 << 5);
281 pub const SHF_INFO_LINK: usize = (1 << 6);
282 pub const SHF_LINK_ORDER: usize = (1 << 7);
283 pub const SHF_OS_NONCONFORMING: usize = (1 << 8);
284 pub const SHF_GROUP: usize = (1 << 9);
285 pub const SHF_TLS: usize = (1 << 10);
286 pub const SHF_MASKOS: usize = 0x0ff00000;
287 pub const SHF_MASKPROC: usize = 0xf0000000;
288 pub const SHF_ORDERED: usize = (1 << 30);
289 pub const SHF_EXCLUDE: usize = (1 << 31);
290 pub const GRP_COMDAT: usize = 0x1;
291 
292 #[repr(C)]
293 pub struct Elf32_Sym {
294     pub st_name: Elf32_Word,
295     pub st_value: Elf32_Addr,
296     pub st_size: Elf32_Word,
297     pub st_info: c_uchar,
298     pub st_other: c_uchar,
299     pub st_shndx: Elf32_Section,
300 }
301 
302 #[repr(C)]
303 pub struct Elf64_Sym {
304     pub st_name: Elf64_Word,
305     pub st_info: c_uchar,
306     pub st_other: c_uchar,
307     pub st_shndx: Elf64_Section,
308     pub st_value: Elf64_Addr,
309     pub st_size: Elf64_Xword,
310 }
311 
312 #[repr(C)]
313 pub struct Elf32_Syminfo {
314     pub si_boundto: Elf32_Half,
315     pub si_flags: Elf32_Half,
316 }
317 
318 #[repr(C)]
319 pub struct Elf64_Syminfo {
320     pub si_boundto: Elf64_Half,
321     pub si_flags: Elf64_Half,
322 }
323 
324 pub const SYMINFO_BT_SELF: usize = 0xffff;
325 pub const SYMINFO_BT_PARENT: usize = 0xfffe;
326 pub const SYMINFO_BT_LOWRESERVE: usize = 0xff00;
327 pub const SYMINFO_FLG_DIRECT: usize = 0x0001;
328 pub const SYMINFO_FLG_PASSTHRU: usize = 0x0002;
329 pub const SYMINFO_FLG_COPY: usize = 0x0004;
330 pub const SYMINFO_FLG_LAZYLOAD: usize = 0x0008;
331 pub const SYMINFO_NONE: usize = 0;
332 pub const SYMINFO_CURRENT: usize = 1;
333 pub const SYMINFO_NUM: usize = 2;
334 
335 pub const STB_LOCAL: usize = 0;
336 pub const STB_GLOBAL: usize = 1;
337 pub const STB_WEAK: usize = 2;
338 pub const STB_NUM: usize = 3;
339 pub const STB_LOOS: usize = 10;
340 pub const STB_GNU_UNIQUE: usize = 10;
341 pub const STB_HIOS: usize = 12;
342 pub const STB_LOPROC: usize = 13;
343 pub const STB_HIPROC: usize = 15;
344 pub const STT_NOTYPE: usize = 0;
345 pub const STT_OBJECT: usize = 1;
346 pub const STT_FUNC: usize = 2;
347 pub const STT_SECTION: usize = 3;
348 pub const STT_FILE: usize = 4;
349 pub const STT_COMMON: usize = 5;
350 pub const STT_TLS: usize = 6;
351 pub const STT_NUM: usize = 7;
352 pub const STT_LOOS: usize = 10;
353 pub const STT_GNU_IFUNC: usize = 10;
354 pub const STT_HIOS: usize = 12;
355 pub const STT_LOPROC: usize = 13;
356 pub const STT_HIPROC: usize = 15;
357 pub const STN_UNDEF: usize = 0;
358 
359 pub const STV_DEFAULT: usize = 0;
360 pub const STV_INTERNAL: usize = 1;
361 pub const STV_HIDDEN: usize = 2;
362 pub const STV_PROTECTED: usize = 3;
363 
364 #[repr(C)]
365 pub struct Elf32_Rel {
366     pub r_offset: Elf32_Addr,
367     pub r_info: Elf32_Word,
368 }
369 
370 #[repr(C)]
371 pub struct Elf64_Rel {
372     pub r_offset: Elf64_Addr,
373     pub r_info: Elf64_Xword,
374 }
375 
376 #[repr(C)]
377 pub struct Elf32_Rela {
378     pub r_offset: Elf32_Addr,
379     pub r_info: Elf32_Word,
380     pub r_addend: Elf32_Sword,
381 }
382 
383 #[repr(C)]
384 pub struct Elf64_Rela {
385     pub r_offset: Elf64_Addr,
386     pub r_info: Elf64_Xword,
387     pub r_addend: Elf64_Sxword,
388 }
389 
390 #[repr(C)]
391 pub struct Elf32_Phdr {
392     pub p_type: Elf32_Word,
393     pub p_offset: Elf32_Off,
394     pub p_vaddr: Elf32_Addr,
395     pub p_paddr: Elf32_Addr,
396     pub p_filesz: Elf32_Word,
397     pub p_memsz: Elf32_Word,
398     pub p_flags: Elf32_Word,
399     pub p_align: Elf32_Word,
400 }
401 
402 #[repr(C)]
403 pub struct Elf64_Phdr {
404     pub p_type: Elf64_Word,
405     pub p_flags: Elf64_Word,
406     pub p_offset: Elf64_Off,
407     pub p_vaddr: Elf64_Addr,
408     pub p_paddr: Elf64_Addr,
409     pub p_filesz: Elf64_Xword,
410     pub p_memsz: Elf64_Xword,
411     pub p_align: Elf64_Xword,
412 }
413 
414 pub const PT_NULL: usize = 0;
415 pub const PT_LOAD: usize = 1;
416 pub const PT_DYNAMIC: usize = 2;
417 pub const PT_INTERP: usize = 3;
418 pub const PT_NOTE: usize = 4;
419 pub const PT_SHLIB: usize = 5;
420 pub const PT_PHDR: usize = 6;
421 pub const PT_TLS: usize = 7;
422 pub const PT_NUM: usize = 8;
423 pub const PT_LOOS: usize = 0x60000000;
424 pub const PT_GNU_EH_FRAME: usize = 0x6474e550;
425 pub const PT_GNU_STACK: usize = 0x6474e551;
426 pub const PT_GNU_RELRO: usize = 0x6474e552;
427 pub const PT_LOSUNW: usize = 0x6ffffffa;
428 pub const PT_SUNWBSS: usize = 0x6ffffffa;
429 pub const PT_SUNWSTACK: usize = 0x6ffffffb;
430 pub const PT_HISUNW: usize = 0x6fffffff;
431 pub const PT_HIOS: usize = 0x6fffffff;
432 pub const PT_LOPROC: usize = 0x70000000;
433 pub const PT_HIPROC: usize = 0x7fffffff;
434 pub const PN_XNUM: usize = 0xffff;
435 pub const PF_X: usize = (1 << 0);
436 pub const PF_W: usize = (1 << 1);
437 pub const PF_R: usize = (1 << 2);
438 pub const PF_MASKOS: usize = 0x0ff00000;
439 pub const PF_MASKPROC: usize = 0xf0000000;
440 
441 pub const NT_PRSTATUS: usize = 1;
442 pub const NT_FPREGSET: usize = 2;
443 pub const NT_PRPSINFO: usize = 3;
444 pub const NT_PRXREG: usize = 4;
445 pub const NT_TASKSTRUCT: usize = 4;
446 pub const NT_PLATFORM: usize = 5;
447 pub const NT_AUXV: usize = 6;
448 pub const NT_GWINDOWS: usize = 7;
449 pub const NT_ASRS: usize = 8;
450 pub const NT_PSTATUS: usize = 10;
451 pub const NT_PSINFO: usize = 13;
452 pub const NT_PRCRED: usize = 14;
453 pub const NT_UTSNAME: usize = 15;
454 pub const NT_LWPSTATUS: usize = 16;
455 pub const NT_LWPSINFO: usize = 17;
456 pub const NT_PRFPXREG: usize = 20;
457 pub const NT_SIGINFO: usize = 0x53494749;
458 pub const NT_FILE: usize = 0x46494c45;
459 pub const NT_PRXFPREG: usize = 0x46e62b7f;
460 pub const NT_PPC_VMX: usize = 0x100;
461 pub const NT_PPC_SPE: usize = 0x101;
462 pub const NT_PPC_VSX: usize = 0x102;
463 pub const NT_386_TLS: usize = 0x200;
464 pub const NT_386_IOPERM: usize = 0x201;
465 pub const NT_X86_XSTATE: usize = 0x202;
466 pub const NT_S390_HIGH_GPRS: usize = 0x300;
467 pub const NT_S390_TIMER: usize = 0x301;
468 pub const NT_S390_TODCMP: usize = 0x302;
469 pub const NT_S390_TODPREG: usize = 0x303;
470 pub const NT_S390_CTRS: usize = 0x304;
471 pub const NT_S390_PREFIX: usize = 0x305;
472 pub const NT_S390_LAST_BREAK: usize = 0x306;
473 pub const NT_S390_SYSTEM_CALL: usize = 0x307;
474 pub const NT_S390_TDB: usize = 0x308;
475 pub const NT_ARM_VFP: usize = 0x400;
476 pub const NT_ARM_TLS: usize = 0x401;
477 pub const NT_ARM_HW_BREAK: usize = 0x402;
478 pub const NT_ARM_HW_WATCH: usize = 0x403;
479 pub const NT_METAG_CBUF: usize = 0x500;
480 pub const NT_METAG_RPIPE: usize = 0x501;
481 pub const NT_METAG_TLS: usize = 0x502;
482 pub const NT_VERSION: usize = 1;
483 
484 #[repr(C)]
485 pub union Elf32_Dyn_Union {
486     d_val: Elf32_Word,
487     d_ptr: Elf32_Addr,
488 }
489 
490 #[repr(C)]
491 pub struct Elf32_Dyn {
492     pub d_tag: Elf32_Sword,
493     pub d_un: Elf32_Dyn_Union,
494 }
495 
496 #[repr(C)]
497 pub union Elf64_Dyn_Union {
498     d_val: Elf64_Xword,
499     d_ptr: Elf64_Addr,
500 }
501 
502 #[repr(C)]
503 pub struct Elf64_Dyn {
504     pub d_tag: Elf64_Sxword,
505     pub d_un: Elf64_Dyn_Union,
506 }
507 
508 pub const DT_NULL: usize = 0;
509 pub const DT_NEEDED: usize = 1;
510 pub const DT_PLTRELSZ: usize = 2;
511 pub const DT_PLTGOT: usize = 3;
512 pub const DT_HASH: usize = 4;
513 pub const DT_STRTAB: usize = 5;
514 pub const DT_SYMTAB: usize = 6;
515 pub const DT_RELA: usize = 7;
516 pub const DT_RELASZ: usize = 8;
517 pub const DT_RELAENT: usize = 9;
518 pub const DT_STRSZ: usize = 10;
519 pub const DT_SYMENT: usize = 11;
520 pub const DT_INIT: usize = 12;
521 pub const DT_FINI: usize = 13;
522 pub const DT_SONAME: usize = 14;
523 pub const DT_RPATH: usize = 15;
524 pub const DT_SYMBOLIC: usize = 16;
525 pub const DT_REL: usize = 17;
526 pub const DT_RELSZ: usize = 18;
527 pub const DT_RELENT: usize = 19;
528 pub const DT_PLTREL: usize = 20;
529 pub const DT_DEBUG: usize = 21;
530 pub const DT_TEXTREL: usize = 22;
531 pub const DT_JMPREL: usize = 23;
532 pub const DT_BIND_NOW: usize = 24;
533 pub const DT_INIT_ARRAY: usize = 25;
534 pub const DT_FINI_ARRAY: usize = 26;
535 pub const DT_INIT_ARRAYSZ: usize = 27;
536 pub const DT_FINI_ARRAYSZ: usize = 28;
537 pub const DT_RUNPATH: usize = 29;
538 pub const DT_FLAGS: usize = 30;
539 pub const DT_ENCODING: usize = 32;
540 pub const DT_PREINIT_ARRAY: usize = 32;
541 pub const DT_PREINIT_ARRAYSZ: usize = 33;
542 pub const DT_NUM: usize = 34;
543 pub const DT_LOOS: usize = 0x6000000d;
544 pub const DT_HIOS: usize = 0x6ffff000;
545 pub const DT_LOPROC: usize = 0x70000000;
546 pub const DT_HIPROC: usize = 0x7fffffff;
547 pub const DT_VALRNGLO: usize = 0x6ffffd00;
548 pub const DT_GNU_PRELINKED: usize = 0x6ffffdf5;
549 pub const DT_GNU_CONFLICTSZ: usize = 0x6ffffdf6;
550 pub const DT_GNU_LIBLISTSZ: usize = 0x6ffffdf7;
551 pub const DT_CHECKSUM: usize = 0x6ffffdf8;
552 pub const DT_PLTPADSZ: usize = 0x6ffffdf9;
553 pub const DT_MOVEENT: usize = 0x6ffffdfa;
554 pub const DT_MOVESZ: usize = 0x6ffffdfb;
555 pub const DT_FEATURE_1: usize = 0x6ffffdfc;
556 pub const DT_POSFLAG_1: usize = 0x6ffffdfd;
557 pub const DT_SYMINSZ: usize = 0x6ffffdfe;
558 pub const DT_SYMINENT: usize = 0x6ffffdff;
559 pub const DT_VALNUM: usize = 12;
560 
561 pub const DT_ADDRRNGLO: usize = 0x6ffffe00;
562 pub const DT_GNU_HASH: usize = 0x6ffffef5;
563 pub const DT_TLSDESC_PLT: usize = 0x6ffffef6;
564 pub const DT_TLSDESC_GOT: usize = 0x6ffffef7;
565 pub const DT_GNU_CONFLICT: usize = 0x6ffffef8;
566 pub const DT_GNU_LIBLIST: usize = 0x6ffffef9;
567 pub const DT_CONFIG: usize = 0x6ffffefa;
568 pub const DT_DEPAUDIT: usize = 0x6ffffefb;
569 pub const DT_AUDIT: usize = 0x6ffffefc;
570 pub const DT_PLTPAD: usize = 0x6ffffefd;
571 pub const DT_MOVETAB: usize = 0x6ffffefe;
572 pub const DT_SYMINFO: usize = 0x6ffffeff;
573 pub const DT_ADDRNUM: usize = 11;
574 pub const DT_VERSYM: usize = 0x6ffffff0;
575 pub const DT_RELACOUNT: usize = 0x6ffffff9;
576 pub const DT_RELCOUNT: usize = 0x6ffffffa;
577 pub const DT_FLAGS_1: usize = 0x6ffffffb;
578 pub const DT_VERDEF: usize = 0x6ffffffc;
579 pub const DT_VERDEFNUM: usize = 0x6ffffffd;
580 pub const DT_VERNEED: usize = 0x6ffffffe;
581 pub const DT_VERSIONTAGNUM: usize = 16;
582 pub const DT_AUXILIARY: usize = 0x7ffffffd;
583 pub const DT_FILTER: usize = 0x7fffffff;
584 pub const DT_EXTRANUM: usize = 3;
585 pub const DF_ORIGIN: usize = 0x00000001;
586 pub const DF_SYMBOLIC: usize = 0x00000002;
587 pub const DF_TEXTREL: usize = 0x00000004;
588 pub const DF_BIND_NOW: usize = 0x00000008;
589 pub const DF_STATIC_TLS: usize = 0x00000010;
590 pub const DF_1_NOW: usize = 0x00000001;
591 pub const DF_1_GLOBAL: usize = 0x00000002;
592 pub const DF_1_GROUP: usize = 0x00000004;
593 pub const DF_1_NODELETE: usize = 0x00000008;
594 pub const DF_1_LOADFLTR: usize = 0x00000010;
595 pub const DF_1_INITFIRST: usize = 0x00000020;
596 pub const DF_1_NOOPEN: usize = 0x00000040;
597 pub const DF_1_ORIGIN: usize = 0x00000080;
598 pub const DF_1_DIRECT: usize = 0x00000100;
599 pub const DF_1_TRANS: usize = 0x00000200;
600 pub const DF_1_INTERPOSE: usize = 0x00000400;
601 pub const DF_1_NODEFLIB: usize = 0x00000800;
602 pub const DF_1_NODUMP: usize = 0x00001000;
603 pub const DF_1_CONFALT: usize = 0x00002000;
604 pub const DF_1_ENDFILTEE: usize = 0x00004000;
605 pub const DF_1_DISPRELDNE: usize = 0x00008000;
606 pub const DF_1_DISPRELPND: usize = 0x00010000;
607 pub const DF_1_NODIRECT: usize = 0x00020000;
608 pub const DF_1_IGNMULDEF: usize = 0x00040000;
609 pub const DF_1_NOKSYMS: usize = 0x00080000;
610 pub const DF_1_NOHDR: usize = 0x00100000;
611 pub const DF_1_EDITED: usize = 0x00200000;
612 pub const DF_1_NORELOC: usize = 0x00400000;
613 pub const DF_1_SYMINTPOSE: usize = 0x00800000;
614 pub const DF_1_GLOBAUDIT: usize = 0x01000000;
615 pub const DF_1_SINGLETON: usize = 0x02000000;
616 pub const DTF_1_PARINIT: usize = 0x00000001;
617 pub const DTF_1_CONFEXP: usize = 0x00000002;
618 pub const DF_P1_LAZYLOAD: usize = 0x00000001;
619 pub const DF_P1_GROUPPERM: usize = 0x00000002;
620 
621 #[repr(C)]
622 pub struct Elf32_Verdef {
623     pub vd_version: Elf32_Half,
624     pub vd_flags: Elf32_Half,
625     pub vd_ndx: Elf32_Half,
626     pub vd_cnt: Elf32_Half,
627     pub vd_hash: Elf32_Word,
628     pub vd_aux: Elf32_Word,
629     pub vd_next: Elf32_Word,
630 }
631 
632 #[repr(C)]
633 pub struct Elf64_Verdef {
634     pub vd_version: Elf64_Half,
635     pub vd_flags: Elf64_Half,
636     pub vd_ndx: Elf64_Half,
637     pub vd_cnt: Elf64_Half,
638     pub vd_hash: Elf64_Word,
639     pub vd_aux: Elf64_Word,
640     pub vd_next: Elf64_Word,
641 }
642 
643 pub const VER_DEF_NONE: usize = 0;
644 pub const VER_DEF_CURRENT: usize = 1;
645 pub const VER_DEF_NUM: usize = 2;
646 
647 pub const VER_FLG_BASE: usize = 0x1;
648 pub const VER_FLG_WEAK: usize = 0x2;
649 pub const VER_NDX_LOCAL: usize = 0;
650 pub const VER_NDX_GLOBAL: usize = 1;
651 pub const VER_NDX_LORESERVE: usize = 0xff00;
652 pub const VER_NDX_ELIMINATE: usize = 0xff01;
653 
654 #[repr(C)]
655 pub struct Elf32_Verdaux {
656     pub vda_name: Elf32_Word,
657     pub vda_next: Elf32_Word,
658 }
659 
660 #[repr(C)]
661 pub struct Elf64_Verdaux {
662     pub vda_name: Elf64_Word,
663     pub vda_next: Elf64_Word,
664 }
665 
666 #[repr(C)]
667 pub struct Elf32_Verneed {
668     pub vn_version: Elf32_Half,
669     pub vn_cnt: Elf32_Half,
670     pub vn_file: Elf32_Word,
671     pub vn_aux: Elf32_Word,
672     pub vn_next: Elf32_Word,
673 }
674 
675 #[repr(C)]
676 pub struct Elf64_Verneed {
677     pub vn_version: Elf64_Half,
678     pub vn_cnt: Elf64_Half,
679     pub vn_file: Elf64_Word,
680     pub vn_aux: Elf64_Word,
681     pub vn_next: Elf64_Word,
682 }
683 
684 pub const VER_NEED_NONE: usize = 0;
685 pub const VER_NEED_CURRENT: usize = 1;
686 pub const VER_NEED_NUM: usize = 2;
687 
688 #[repr(C)]
689 pub struct Elf64_Vernaux {
690     pub vna_hash: Elf64_Word,
691     pub vna_flags: Elf64_Half,
692     pub vna_other: Elf64_Half,
693     pub vna_name: Elf64_Word,
694     pub vna_next: Elf64_Word,
695 }
696 
697 #[repr(C)]
698 pub union A_UN {
699     a_val: uint64_t,
700 }
701 
702 #[repr(C)]
703 pub struct Elf64_auxv_t {
704     pub a_type: uint64_t,
705     pub a_un: A_UN,
706 }
707 
708 pub const AT_NULL: usize = 0;
709 pub const AT_IGNORE: usize = 1;
710 pub const AT_EXECFD: usize = 2;
711 pub const AT_PHDR: usize = 3;
712 pub const AT_PHENT: usize = 4;
713 pub const AT_PHNUM: usize = 5;
714 pub const AT_PAGESZ: usize = 6;
715 pub const AT_BASE: usize = 7;
716 pub const AT_FLAGS: usize = 8;
717 pub const AT_ENTRY: usize = 9;
718 pub const AT_NOTELF: usize = 10;
719 pub const AT_UID: usize = 11;
720 pub const AT_EUID: usize = 12;
721 pub const AT_GID: usize = 13;
722 pub const AT_EGID: usize = 14;
723 pub const AT_CLKTCK: usize = 17;
724 pub const AT_PLATFORM: usize = 15;
725 pub const AT_HWCAP: usize = 16;
726 pub const AT_FPUCW: usize = 18;
727 pub const AT_DCACHEBSIZE: usize = 19;
728 pub const AT_ICACHEBSIZE: usize = 20;
729 pub const AT_UCACHEBSIZE: usize = 21;
730 pub const AT_IGNOREPPC: usize = 22;
731 pub const AT_SECURE: usize = 23;
732 pub const AT_BASE_PLATFORM: usize = 24;
733 pub const AT_RANDOM: usize = 25;
734 pub const AT_HWCAP2: usize = 26;
735 pub const AT_EXECFN: usize = 31;
736 pub const AT_SYSINFO: usize = 32;
737 pub const AT_SYSINFO_EHDR: usize = 33;
738 pub const AT_L1I_CACHESHAPE: usize = 34;
739 pub const AT_L1D_CACHESHAPE: usize = 35;
740 pub const AT_L2_CACHESHAPE: usize = 36;
741 pub const AT_L3_CACHESHAPE: usize = 37;
742 
743 #[repr(C)]
744 pub struct Elf32_Nhdr {
745     pub n_namesz: Elf32_Word,
746     pub n_descsz: Elf32_Word,
747     pub n_type: Elf32_Word,
748 }
749 
750 #[repr(C)]
751 pub struct Elf64_Nhdr {
752     pub n_namesz: Elf64_Word,
753     pub n_descsz: Elf64_Word,
754     pub n_type: Elf64_Word,
755 }
756 
757 pub const ELF_NOTE_SOLARIS: &'static str = "SUNW Solaris";
758 pub const ELF_NOTE_GNU: &'static str = "GNU";
759 
760 pub const ELF_NOTE_PAGESIZE_HINT: usize = 1;
761 
762 pub const NT_GNU_ABI_TAG: usize = 1;
763 pub const ELF_NOTE_ABI: usize = NT_GNU_ABI_TAG;
764 
765 pub const ELF_NOTE_OS_LINUX: usize = 0;
766 pub const ELF_NOTE_OS_GNU: usize = 1;
767 pub const ELF_NOTE_OS_SOLARIS2: usize = 2;
768 pub const ELF_NOTE_OS_FREEBSD: usize = 3;
769 
770 pub const NT_GNU_BUILD_ID: usize = 3;
771 pub const NT_GNU_GOLD_VERSION: usize = 4;
772 
773 #[repr(C)]
774 pub struct Elf64_Move {
775     pub m_value: Elf64_Xword,
776     pub m_info: Elf64_Xword,
777     pub m_poffset: Elf64_Xword,
778     pub m_repeat: Elf64_Half,
779     pub m_stride: Elf64_Half,
780 }
781 
782 pub const R_AARCH64_NONE: usize = 0;
783 pub const R_AARCH64_ABS64: usize = 257;
784 pub const R_AARCH64_ABS32: usize = 258;
785 pub const R_AARCH64_ABS16: usize = 259;
786 pub const R_AARCH64_PREL64: usize = 260;
787 pub const R_AARCH64_PREL32: usize = 261;
788 pub const R_AARCH64_PREL16: usize = 262;
789 pub const R_AARCH64_MOVW_UABS_G0: usize = 263;
790 pub const R_AARCH64_MOVW_UABS_G0_NC: usize = 264;
791 pub const R_AARCH64_MOVW_UABS_G1: usize = 265;
792 pub const R_AARCH64_MOVW_UABS_G1_NC: usize = 266;
793 pub const R_AARCH64_MOVW_UABS_G2: usize = 267;
794 pub const R_AARCH64_MOVW_UABS_G2_NC: usize = 268;
795 pub const R_AARCH64_MOVW_UABS_G3: usize = 269;
796 pub const R_AARCH64_MOVW_SABS_G0: usize = 270;
797 pub const R_AARCH64_MOVW_SABS_G1: usize = 271;
798 pub const R_AARCH64_MOVW_SABS_G2: usize = 272;
799 pub const R_AARCH64_LD_PREL_LO19: usize = 273;
800 pub const R_AARCH64_ADR_PREL_LO21: usize = 274;
801 pub const R_AARCH64_ADR_PREL_PG_HI21: usize = 275;
802 pub const R_AARCH64_ADR_PREL_PG_HI21_NC: usize = 276;
803 pub const R_AARCH64_ADD_ABS_LO12_NC: usize = 277;
804 pub const R_AARCH64_LDST8_ABS_LO12_NC: usize = 278;
805 pub const R_AARCH64_TSTBR14: usize = 279;
806 pub const R_AARCH64_CONDBR19: usize = 280;
807 pub const R_AARCH64_JUMP26: usize = 282;
808 pub const R_AARCH64_CALL26: usize = 283;
809 pub const R_AARCH64_LDST16_ABS_LO12_NC: usize = 284;
810 pub const R_AARCH64_LDST32_ABS_LO12_NC: usize = 285;
811 pub const R_AARCH64_LDST64_ABS_LO12_NC: usize = 286;
812 pub const R_AARCH64_MOVW_PREL_G0: usize = 287;
813 pub const R_AARCH64_MOVW_PREL_G0_NC: usize = 288;
814 pub const R_AARCH64_MOVW_PREL_G1: usize = 289;
815 pub const R_AARCH64_MOVW_PREL_G1_NC: usize = 290;
816 pub const R_AARCH64_MOVW_PREL_G2: usize = 291;
817 pub const R_AARCH64_MOVW_PREL_G2_NC: usize = 292;
818 pub const R_AARCH64_MOVW_PREL_G3: usize = 293;
819 pub const R_AARCH64_LDST128_ABS_LO12_NC: usize = 299;
820 pub const R_AARCH64_MOVW_GOTOFF_G0: usize = 300;
821 pub const R_AARCH64_MOVW_GOTOFF_G0_NC: usize = 301;
822 pub const R_AARCH64_MOVW_GOTOFF_G1: usize = 302;
823 pub const R_AARCH64_MOVW_GOTOFF_G1_NC: usize = 303;
824 pub const R_AARCH64_MOVW_GOTOFF_G2: usize = 304;
825 pub const R_AARCH64_MOVW_GOTOFF_G2_NC: usize = 305;
826 pub const R_AARCH64_MOVW_GOTOFF_G3: usize = 306;
827 pub const R_AARCH64_GOTREL64: usize = 307;
828 pub const R_AARCH64_GOTREL32: usize = 308;
829 pub const R_AARCH64_GOT_LD_PREL19: usize = 309;
830 pub const R_AARCH64_LD64_GOTOFF_LO15: usize = 310;
831 pub const R_AARCH64_ADR_GOT_PAGE: usize = 311;
832 pub const R_AARCH64_LD64_GOT_LO12_NC: usize = 312;
833 pub const R_AARCH64_LD64_GOTPAGE_LO15: usize = 313;
834 pub const R_AARCH64_TLSGD_ADR_PREL21: usize = 512;
835 pub const R_AARCH64_TLSGD_ADR_PAGE21: usize = 513;
836 pub const R_AARCH64_TLSGD_ADD_LO12_NC: usize = 514;
837 pub const R_AARCH64_TLSGD_MOVW_G1: usize = 515;
838 pub const R_AARCH64_TLSGD_MOVW_G0_NC: usize = 516;
839 pub const R_AARCH64_TLSLD_ADR_PREL21: usize = 517;
840 pub const R_AARCH64_TLSLD_ADR_PAGE21: usize = 518;
841 pub const R_AARCH64_TLSLD_ADD_LO12_NC: usize = 519;
842 pub const R_AARCH64_TLSLD_MOVW_G1: usize = 520;
843 pub const R_AARCH64_TLSLD_MOVW_G0_NC: usize = 521;
844 pub const R_AARCH64_TLSLD_LD_PREL19: usize = 522;
845 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G2: usize = 523;
846 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G1: usize = 524;
847 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: usize = 525;
848 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G0: usize = 526;
849 pub const R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: usize = 527;
850 pub const R_AARCH64_TLSLD_ADD_DTPREL_HI12: usize = 528;
851 pub const R_AARCH64_TLSLD_ADD_DTPREL_LO12: usize = 529;
852 pub const R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: usize = 530;
853 pub const R_AARCH64_TLSLD_LDST8_DTPREL_LO12: usize = 531;
854 pub const R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC: usize = 532;
855 pub const R_AARCH64_TLSLD_LDST16_DTPREL_LO12: usize = 533;
856 pub const R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC: usize = 534;
857 pub const R_AARCH64_TLSLD_LDST32_DTPREL_LO12: usize = 535;
858 pub const R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC: usize = 536;
859 pub const R_AARCH64_TLSLD_LDST64_DTPREL_LO12: usize = 537;
860 pub const R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC: usize = 538;
861 pub const R_AARCH64_TLSIE_MOVW_GOTTPREL_G1: usize = 539;
862 pub const R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: usize = 540;
863 pub const R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: usize = 541;
864 pub const R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: usize = 542;
865 pub const R_AARCH64_TLSIE_LD_GOTTPREL_PREL19: usize = 543;
866 pub const R_AARCH64_TLSLE_MOVW_TPREL_G2: usize = 544;
867 pub const R_AARCH64_TLSLE_MOVW_TPREL_G1: usize = 545;
868 pub const R_AARCH64_TLSLE_MOVW_TPREL_G1_NC: usize = 546;
869 pub const R_AARCH64_TLSLE_MOVW_TPREL_G0: usize = 547;
870 pub const R_AARCH64_TLSLE_MOVW_TPREL_G0_NC: usize = 548;
871 pub const R_AARCH64_TLSLE_ADD_TPREL_HI12: usize = 549;
872 pub const R_AARCH64_TLSLE_ADD_TPREL_LO12: usize = 550;
873 pub const R_AARCH64_TLSLE_ADD_TPREL_LO12_NC: usize = 551;
874 pub const R_AARCH64_TLSLE_LDST8_TPREL_LO12: usize = 552;
875 pub const R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC: usize = 553;
876 pub const R_AARCH64_TLSLE_LDST16_TPREL_LO12: usize = 554;
877 pub const R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC: usize = 555;
878 pub const R_AARCH64_TLSLE_LDST32_TPREL_LO12: usize = 556;
879 pub const R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC: usize = 557;
880 pub const R_AARCH64_TLSLE_LDST64_TPREL_LO12: usize = 558;
881 pub const R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC: usize = 559;
882 pub const R_AARCH64_TLSDESC_LD_PREL19: usize = 560;
883 pub const R_AARCH64_TLSDESC_ADR_PREL21: usize = 561;
884 pub const R_AARCH64_TLSDESC_ADR_PAGE21: usize = 562;
885 pub const R_AARCH64_TLSDESC_LD64_LO12: usize = 563;
886 pub const R_AARCH64_TLSDESC_ADD_LO12: usize = 564;
887 pub const R_AARCH64_TLSDESC_OFF_G1: usize = 565;
888 pub const R_AARCH64_TLSDESC_OFF_G0_NC: usize = 566;
889 pub const R_AARCH64_TLSDESC_LDR: usize = 567;
890 pub const R_AARCH64_TLSDESC_ADD: usize = 568;
891 pub const R_AARCH64_TLSDESC_CALL: usize = 569;
892 pub const R_AARCH64_TLSLE_LDST128_TPREL_LO12: usize = 570;
893 pub const R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC: usize = 571;
894 pub const R_AARCH64_TLSLD_LDST128_DTPREL_LO12: usize = 572;
895 pub const R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC: usize = 573;
896 pub const R_AARCH64_COPY: usize = 1024;
897 pub const R_AARCH64_GLOB_DAT: usize = 1025;
898 pub const R_AARCH64_JUMP_SLOT: usize = 1026;
899 pub const R_AARCH64_RELATIVE: usize = 1027;
900 pub const R_AARCH64_TLS_DTPMOD64: usize = 1028;
901 pub const R_AARCH64_TLS_DTPREL64: usize = 1029;
902 pub const R_AARCH64_TLS_TPREL64: usize = 1030;
903 pub const R_AARCH64_TLSDESC: usize = 1031;
904 
905 pub const R_X86_64_NONE: usize = 0;
906 pub const R_X86_64_64: usize = 1;
907 pub const R_X86_64_PC32: usize = 2;
908 pub const R_X86_64_GOT32: usize = 3;
909 pub const R_X86_64_PLT32: usize = 4;
910 pub const R_X86_64_COPY: usize = 5;
911 pub const R_X86_64_GLOB_DAT: usize = 6;
912 pub const R_X86_64_JUMP_SLOT: usize = 7;
913 pub const R_X86_64_RELATIVE: usize = 8;
914 pub const R_X86_64_GOTPCREL: usize = 9;
915 pub const R_X86_64_32: usize = 10;
916 pub const R_X86_64_32S: usize = 11;
917 pub const R_X86_64_16: usize = 12;
918 pub const R_X86_64_PC16: usize = 13;
919 pub const R_X86_64_8: usize = 14;
920 pub const R_X86_64_PC8: usize = 15;
921 pub const R_X86_64_DTPMOD64: usize = 16;
922 pub const R_X86_64_DTPOFF64: usize = 17;
923 pub const R_X86_64_TPOFF64: usize = 18;
924 pub const R_X86_64_TLSGD: usize = 19;
925 pub const R_X86_64_TLSLD: usize = 20;
926 pub const R_X86_64_DTPOFF32: usize = 21;
927 pub const R_X86_64_GOTTPOFF: usize = 22;
928 pub const R_X86_64_TPOFF32: usize = 23;
929 pub const R_X86_64_PC64: usize = 24;
930 pub const R_X86_64_GOTOFF64: usize = 25;
931 pub const R_X86_64_GOTPC32: usize = 26;
932 pub const R_X86_64_GOT64: usize = 27;
933 pub const R_X86_64_GOTPCREL64: usize = 28;
934 pub const R_X86_64_GOTPC64: usize = 29;
935 pub const R_X86_64_GOTPLT64: usize = 30;
936 pub const R_X86_64_PLTOFF64: usize = 31;
937 pub const R_X86_64_SIZE32: usize = 32;
938 pub const R_X86_64_SIZE64: usize = 33;
939 pub const R_X86_64_GOTPC32_TLSDESC: usize = 34;
940 pub const R_X86_64_TLSDESC_CALL: usize = 35;
941 pub const R_X86_64_TLSDESC: usize = 36;
942 pub const R_X86_64_IRELATIVE: usize = 37;
943 pub const R_X86_64_RELATIVE64: usize = 38;
944 pub const R_X86_64_NUM: usize = 39;
945 
946 #[no_mangle]
947 pub extern "C" fn stupid_cbindgen_needs_a_function_that_holds_all_elf_structs(
948     a: Elf32_Ehdr,
949     b: Elf64_Ehdr,
950     c: Elf32_Shdr,
951     d: Elf64_Shdr,
952     e: Elf32_Sym,
953     f: Elf64_Sym,
954     g: Elf32_Syminfo,
955     h: Elf64_Syminfo,
956     i: Elf32_Rel,
957     j: Elf64_Rel,
958     k: Elf32_Rela,
959     l: Elf64_Rela,
960     m: Elf32_Phdr,
961     n: Elf64_Phdr,
962     o: Elf32_Dyn,
963     p: Elf64_Dyn,
964     q: Elf32_Verdef,
965     r: Elf64_Verdef,
966     s: Elf32_Verdaux,
967     t: Elf64_Verdaux,
968     u: Elf32_Verneed,
969     v: Elf64_Verneed,
970     w: Elf64_Vernaux,
971     x: Elf64_auxv_t,
972     y: Elf32_Nhdr,
973     z: Elf64_Nhdr,
974     aa: Elf64_Move,
975 ) {
976 }
977