Skip to main content

relibc/header/elf/
mod.rs

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