1 //! Example that uses the lower level read API.
2
3 use object::read::archive::ArchiveFile;
4 use object::read::macho::{FatArch, FatHeader};
5 use object::{Bytes, Endianness};
6 use std::convert::TryInto;
7 use std::io::Write;
8 use std::{env, fmt, fs, io, process, str};
9
main()10 fn main() {
11 let arg_len = env::args().len();
12 if arg_len <= 1 {
13 eprintln!("Usage: {} <file> ...", env::args().next().unwrap());
14 process::exit(1);
15 }
16
17 for file_path in env::args().skip(1) {
18 if arg_len > 2 {
19 println!();
20 println!("{}:", file_path);
21 }
22
23 let file = match fs::File::open(&file_path) {
24 Ok(file) => file,
25 Err(err) => {
26 println!("Failed to open file '{}': {}", file_path, err);
27 continue;
28 }
29 };
30 let file = match unsafe { memmap::Mmap::map(&file) } {
31 Ok(mmap) => mmap,
32 Err(err) => {
33 println!("Failed to map file '{}': {}", file_path, err);
34 continue;
35 }
36 };
37
38 let stdout = io::stdout();
39 let mut printer = Printer::new(stdout.lock());
40 print_object(&mut printer, &*file);
41 }
42 }
43
44 struct Printer<W: Write> {
45 w: W,
46 indent: usize,
47 }
48
49 impl<W: Write> Printer<W> {
new(w: W) -> Self50 fn new(w: W) -> Self {
51 Self { w, indent: 0 }
52 }
53
blank(&mut self)54 fn blank(&mut self) {
55 writeln!(self.w).unwrap();
56 }
57
print_indent(&mut self)58 fn print_indent(&mut self) {
59 if self.indent != 0 {
60 write!(self.w, "{:-1$}", " ", self.indent * 4).unwrap();
61 }
62 }
63
print_string(&mut self, s: &[u8])64 fn print_string(&mut self, s: &[u8]) {
65 if let Ok(s) = str::from_utf8(s) {
66 write!(self.w, "{}", s).unwrap();
67 } else {
68 write!(self.w, "{:?}", Bytes(s)).unwrap();
69 }
70 }
71
group<F: FnOnce(&mut Self)>(&mut self, name: &str, f: F)72 fn group<F: FnOnce(&mut Self)>(&mut self, name: &str, f: F) {
73 self.print_indent();
74 writeln!(self.w, "{} {{", name).unwrap();
75 self.indent += 1;
76 f(self);
77 self.indent -= 1;
78 self.print_indent();
79 writeln!(self.w, "}}").unwrap();
80 }
81
field_name(&mut self, name: &str)82 fn field_name(&mut self, name: &str) {
83 self.print_indent();
84 if !name.is_empty() {
85 write!(self.w, "{}: ", name).unwrap();
86 }
87 }
88
field<T: fmt::Display>(&mut self, name: &str, value: T)89 fn field<T: fmt::Display>(&mut self, name: &str, value: T) {
90 self.field_name(name);
91 writeln!(self.w, "{}", value).unwrap();
92 }
93
field_hex<T: Into<u64>>(&mut self, name: &str, value: T)94 fn field_hex<T: Into<u64>>(&mut self, name: &str, value: T) {
95 self.field_name(name);
96 writeln!(self.w, "0x{:X}", value.into()).unwrap();
97 }
98
field_bytes(&mut self, name: &str, value: &[u8])99 fn field_bytes(&mut self, name: &str, value: &[u8]) {
100 self.field_name(name);
101 writeln!(self.w, "{:X?}", value).unwrap();
102 }
103
field_string<T: Into<u64>>(&mut self, name: &str, value: T, s: Option<&[u8]>)104 fn field_string<T: Into<u64>>(&mut self, name: &str, value: T, s: Option<&[u8]>) {
105 if let Some(s) = s {
106 self.field_name(name);
107 self.print_string(s);
108 writeln!(self.w, " (0x{:X})", value.into()).unwrap();
109 } else {
110 self.field_hex(name, value);
111 }
112 }
113
field_enum<T: Eq + Into<u64>>(&mut self, name: &str, value: T, flags: &[Flag<T>])114 fn field_enum<T: Eq + Into<u64>>(&mut self, name: &str, value: T, flags: &[Flag<T>]) {
115 for flag in flags {
116 if value == flag.value {
117 self.field_name(name);
118 writeln!(self.w, "{} (0x{:X})", flag.name, value.into()).unwrap();
119 return;
120 }
121 }
122 self.field_hex(name, value);
123 }
124
field_enums<T: Eq + Into<u64>>(&mut self, name: &str, value: T, enums: &[&[Flag<T>]])125 fn field_enums<T: Eq + Into<u64>>(&mut self, name: &str, value: T, enums: &[&[Flag<T>]]) {
126 for flags in enums {
127 for flag in *flags {
128 if value == flag.value {
129 self.field_name(name);
130 writeln!(self.w, "{} (0x{:X})", flag.name, value.into()).unwrap();
131 return;
132 }
133 }
134 }
135 self.field_hex(name, value);
136 }
137
flags<T: Into<u64>, U: Copy + Into<u64>>(&mut self, value: T, mask: U, flags: &[Flag<U>])138 fn flags<T: Into<u64>, U: Copy + Into<u64>>(&mut self, value: T, mask: U, flags: &[Flag<U>]) {
139 let value = value.into();
140 let mask = mask.into();
141 self.indent += 1;
142 if mask != 0 {
143 for flag in flags {
144 if value & mask == flag.value.into() {
145 self.print_indent();
146 writeln!(self.w, "{} (0x{:X})", flag.name, flag.value.into()).unwrap();
147 }
148 }
149 } else {
150 for flag in flags {
151 if value & flag.value.into() == flag.value.into() {
152 self.print_indent();
153 writeln!(self.w, "{} (0x{:X})", flag.name, flag.value.into()).unwrap();
154 }
155 }
156 }
157 self.indent -= 1;
158 }
159 }
160
161 struct Flag<T> {
162 value: T,
163 name: &'static str,
164 }
165
166 macro_rules! flags {
167 ($($name:ident),+ $(,)?) => ( [ $(Flag { value: $name, name: stringify!($name), }),+ ] )
168 }
169
print_object(p: &mut Printer<impl Write>, data: &[u8])170 fn print_object(p: &mut Printer<impl Write>, data: &[u8]) {
171 let kind = match object::FileKind::parse(data) {
172 Ok(file) => file,
173 Err(err) => {
174 println!("Failed to parse file: {}", err);
175 return;
176 }
177 };
178 match kind {
179 object::FileKind::Archive => print_archive(p, data),
180 object::FileKind::Elf32 => elf::print_elf32(p, Bytes(data)),
181 object::FileKind::Elf64 => elf::print_elf64(p, Bytes(data)),
182 object::FileKind::MachOFat32 => print_macho_fat32(p, data),
183 object::FileKind::MachOFat64 => print_macho_fat64(p, data),
184 // TODO
185 _ => {}
186 }
187 }
188
print_archive(p: &mut Printer<impl Write>, data: &[u8])189 fn print_archive(p: &mut Printer<impl Write>, data: &[u8]) {
190 if let Ok(archive) = ArchiveFile::parse(data) {
191 p.field("Format", format!("Archive ({:?})", archive.kind()));
192 for member in archive.members() {
193 if let Ok(member) = member {
194 p.blank();
195 p.field("Member", String::from_utf8_lossy(member.name()));
196 print_object(p, member.data());
197 }
198 }
199 }
200 }
201
print_macho_fat32(p: &mut Printer<impl Write>, data: &[u8])202 fn print_macho_fat32(p: &mut Printer<impl Write>, data: &[u8]) {
203 if let Ok(arches) = FatHeader::parse_arch32(data) {
204 p.field("Format", "Mach-O Fat 32");
205 for arch in arches {
206 p.blank();
207 p.field("Fat Arch", format!("{:?}", arch.architecture()));
208 if let Ok(data) = arch.data(data) {
209 print_object(p, data);
210 }
211 }
212 }
213 }
214
print_macho_fat64(p: &mut Printer<impl Write>, data: &[u8])215 fn print_macho_fat64(p: &mut Printer<impl Write>, data: &[u8]) {
216 if let Ok(arches) = FatHeader::parse_arch64(data) {
217 p.field("Format", "Mach-O Fat 64");
218 for arch in arches {
219 p.blank();
220 p.field("Fat Arch", format!("{:?}", arch.architecture()));
221 if let Ok(data) = arch.data(data) {
222 print_object(p, data);
223 }
224 }
225 }
226 }
227
228 mod elf {
229 use super::*;
230 use object::elf::*;
231 use object::read::elf::*;
232
print_elf32(p: &mut Printer<impl Write>, data: Bytes)233 pub(super) fn print_elf32(p: &mut Printer<impl Write>, data: Bytes) {
234 if let Ok(elf) = object::elf::FileHeader32::<Endianness>::parse(data) {
235 println!("Format: ELF 32-bit");
236 print_elf(p, elf, data);
237 }
238 }
239
print_elf64(p: &mut Printer<impl Write>, data: Bytes)240 pub(super) fn print_elf64(p: &mut Printer<impl Write>, data: Bytes) {
241 if let Ok(elf) = object::elf::FileHeader64::<Endianness>::parse(data) {
242 println!("Format: ELF 64-bit");
243 print_elf(p, elf, data);
244 }
245 }
246
print_elf<Elf: FileHeader<Endian = Endianness>>( p: &mut Printer<impl Write>, elf: &Elf, data: Bytes, )247 fn print_elf<Elf: FileHeader<Endian = Endianness>>(
248 p: &mut Printer<impl Write>,
249 elf: &Elf,
250 data: Bytes,
251 ) {
252 if let Ok(endian) = elf.endian() {
253 print_file_header(p, endian, elf);
254 if let Ok(segments) = elf.program_headers(endian, data) {
255 print_program_headers(p, endian, data, elf, segments);
256 }
257 if let Ok(sections) = elf.sections(endian, data) {
258 print_section_headers(p, endian, data, elf, §ions);
259 }
260 }
261 }
262
print_file_header<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, elf: &Elf, )263 fn print_file_header<Elf: FileHeader>(
264 p: &mut Printer<impl Write>,
265 endian: Elf::Endian,
266 elf: &Elf,
267 ) {
268 p.group("FileHeader", |p| {
269 p.group("Ident", |p| print_ident(p, elf.e_ident()));
270 p.field_enum("Type", elf.e_type(endian), &FLAGS_ET);
271 p.field_enum("Machine", elf.e_machine(endian), &FLAGS_EM);
272 let version = elf.e_version(endian);
273 if version < 256 {
274 p.field_enum("Version", version as u8, &FLAGS_EV);
275 } else {
276 p.field_hex("Version", version);
277 }
278 p.field_enum("Type", elf.e_type(endian), &FLAGS_ET);
279 p.field_hex("Entry", elf.e_entry(endian));
280 p.field_hex("ProgramHeaderOffset", elf.e_phoff(endian));
281 p.field_hex("SectionHeaderOffset", elf.e_shoff(endian));
282 let flags = elf.e_flags(endian);
283 p.field_hex("Flags", flags);
284 match elf.e_machine(endian) {
285 EM_SPARC => p.flags(flags, 0, &FLAGS_EF_SPARC),
286 EM_SPARCV9 => p.flags(flags, 0, &FLAGS_EF_SPARCV9),
287 EM_MIPS => {
288 p.flags(flags, 0, &FLAGS_EF_MIPS);
289 p.flags(flags, EF_MIPS_ARCH, &FLAGS_EF_MIPS_ARCH);
290 }
291 EM_PARISC => {
292 p.flags(flags, 0, &FLAGS_EF_PARISC);
293 p.flags(flags, EF_PARISC_ARCH, &FLAGS_EF_PARISC_ARCH);
294 }
295 EM_ALPHA => p.flags(flags, 0, &FLAGS_EF_ALPHA),
296 EM_PPC => p.flags(flags, 0, &FLAGS_EF_PPC),
297 EM_PPC64 => p.flags(flags, 0, &FLAGS_EF_PPC64),
298 EM_ARM => {
299 p.flags(flags, 0, &FLAGS_EF_ARM);
300 p.flags(flags, EF_ARM_EABIMASK, &FLAGS_EF_ARM_EABI);
301 }
302 EM_CSKY => p.flags(flags, EF_CSKY_ABIMASK, &FLAGS_EF_CSKY_ABI),
303 EM_IA_64 => p.flags(flags, 0, &FLAGS_EF_IA_64),
304 EM_SH => p.flags(flags, EF_SH_MACH_MASK, &FLAGS_EF_SH_MACH),
305 EM_S390 => p.flags(flags, 0, &FLAGS_EF_S390),
306 EM_RISCV => {
307 p.flags(flags, 0, &FLAGS_EF_RISCV);
308 p.flags(flags, EF_RISCV_FLOAT_ABI, &FLAGS_EF_RISCV_FLOAT_ABI);
309 }
310 _ => {}
311 };
312 p.field_hex("HeaderSize", elf.e_ehsize(endian));
313 p.field_hex("ProgramHeaderEntrySize", elf.e_phentsize(endian));
314 p.field("ProgramHeaderCount", elf.e_phnum(endian));
315 p.field_hex("SectionHeaderEntrySize", elf.e_shentsize(endian));
316 p.field("SectionHeaderCount", elf.e_shnum(endian));
317 p.field("SectionHeaderStringTableIndex", elf.e_shstrndx(endian));
318 });
319 }
320
print_ident(p: &mut Printer<impl Write>, ident: &Ident)321 fn print_ident(p: &mut Printer<impl Write>, ident: &Ident) {
322 p.field("Magic", format!("{:X?}", ident.magic));
323 p.field_enum("Class", ident.class, &FLAGS_EI_CLASS);
324 p.field_enum("Data", ident.data, &FLAGS_EI_DATA);
325 p.field_enum("Version", ident.version, &FLAGS_EV);
326 p.field_enum("OsAbi", ident.os_abi, &FLAGS_EI_OSABI);
327 p.field_hex("AbiVersion", ident.abi_version);
328 p.field("Unused", format!("{:X?}", ident.padding));
329 }
330
print_program_headers<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, elf: &Elf, segments: &[Elf::ProgramHeader], )331 fn print_program_headers<Elf: FileHeader>(
332 p: &mut Printer<impl Write>,
333 endian: Elf::Endian,
334 data: Bytes,
335 elf: &Elf,
336 segments: &[Elf::ProgramHeader],
337 ) {
338 for segment in segments {
339 p.group("ProgramHeader", |p| {
340 let proc = match elf.e_machine(endian) {
341 EM_MIPS => FLAGS_PT_MIPS,
342 EM_PARISC => FLAGS_PT_PARISC,
343 EM_ARM => FLAGS_PT_ARM,
344 EM_IA_64 => FLAGS_PT_IA_64,
345 _ => &[],
346 };
347 let os = match elf.e_ident().os_abi {
348 ELFOSABI_HPUX => FLAGS_PT_HP,
349 _ => &[],
350 };
351 p.field_enums("Type", segment.p_type(endian), &[FLAGS_PT, proc, os]);
352
353 p.field_hex("Offset", segment.p_offset(endian));
354 p.field_hex("VirtualAddress", segment.p_vaddr(endian));
355 p.field_hex("PhysicalAddress", segment.p_paddr(endian));
356 p.field_hex("FileSize", segment.p_filesz(endian));
357 p.field_hex("MemorySize", segment.p_memsz(endian));
358
359 let flags = segment.p_flags(endian);
360 p.field_hex("Flags", flags);
361 p.flags(flags, 0, FLAGS_PF);
362 match elf.e_ident().os_abi {
363 ELFOSABI_HPUX => p.flags(flags, 0, FLAGS_PF_HP),
364 _ => {}
365 };
366 match elf.e_machine(endian) {
367 EM_MIPS => p.flags(flags, 0, FLAGS_PF_MIPS),
368 EM_PARISC => p.flags(flags, 0, FLAGS_PF_PARISC),
369 EM_ARM => p.flags(flags, 0, FLAGS_PF_ARM),
370 EM_IA_64 => p.flags(flags, 0, FLAGS_PF_IA_64),
371 _ => {}
372 };
373
374 p.field_hex("Align", segment.p_align(endian));
375
376 match segment.p_type(endian) {
377 PT_NOTE => print_segment_notes(p, endian, data, elf, segment),
378 PT_DYNAMIC => print_segment_dynamic(p, endian, data, elf, segments, segment),
379 // TODO:
380 //PT_INTERP =>
381 //PT_SHLIB =>
382 //PT_PHDR =>
383 //PT_TLS =>
384 //PT_GNU_EH_FRAME =>
385 //PT_GNU_STACK =>
386 //PT_GNU_RELRO =>
387 _ => {}
388 }
389 });
390 }
391 }
392
print_segment_notes<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, _elf: &Elf, segment: &Elf::ProgramHeader, )393 fn print_segment_notes<Elf: FileHeader>(
394 p: &mut Printer<impl Write>,
395 endian: Elf::Endian,
396 data: Bytes,
397 _elf: &Elf,
398 segment: &Elf::ProgramHeader,
399 ) {
400 if let Ok(Some(notes)) = segment.notes(endian, data) {
401 print_notes(p, endian, notes);
402 }
403 }
404
print_segment_dynamic<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, elf: &Elf, segments: &[Elf::ProgramHeader], segment: &Elf::ProgramHeader, )405 fn print_segment_dynamic<Elf: FileHeader>(
406 p: &mut Printer<impl Write>,
407 endian: Elf::Endian,
408 data: Bytes,
409 elf: &Elf,
410 segments: &[Elf::ProgramHeader],
411 segment: &Elf::ProgramHeader,
412 ) {
413 if let Ok(Some(dynamic)) = segment.dynamic(endian, data) {
414 // TODO: add a helper API for this and the other mandatory tags?
415 let mut strtab = 0;
416 let mut strsz = 0;
417 for d in dynamic {
418 let tag = d.d_tag(endian).into();
419 if tag == DT_STRTAB.into() {
420 strtab = d.d_val(endian).into();
421 } else if tag == DT_STRSZ.into() {
422 strsz = d.d_val(endian).into();
423 }
424 }
425 let mut dynstr = object::StringTable::default();
426 for s in segments {
427 if let Ok(Some(data)) = s.data_range(endian, data, strtab, strsz) {
428 dynstr = object::StringTable::new(data);
429 break;
430 }
431 }
432
433 let proc = match elf.e_machine(endian) {
434 EM_SPARC => FLAGS_DT_SPARC,
435 EM_MIPS => FLAGS_DT_MIPS,
436 EM_ALPHA => FLAGS_DT_ALPHA,
437 EM_PPC => FLAGS_DT_PPC,
438 EM_PPC64 => FLAGS_DT_PPC64,
439 EM_IA_64 => FLAGS_DT_IA_64,
440 EM_ALTERA_NIOS2 => FLAGS_DT_NIOS2,
441 _ => &[],
442 };
443 for d in dynamic {
444 let tag = d.d_tag(endian).into();
445 let val = d.d_val(endian).into();
446 p.group("Dynamic", |p| {
447 if let Ok(tag) = tag.try_into() {
448 p.field_enums("Tag", tag, &[FLAGS_DT, proc]);
449 if tag == DT_NEEDED {
450 p.field_string(
451 "Value",
452 val,
453 val.try_into().ok().and_then(|val| dynstr.get(val).ok()),
454 );
455 } else {
456 p.field_hex("Value", val);
457 if tag == DT_FLAGS {
458 p.flags(val, 0, FLAGS_DF);
459 } else if tag == DT_FLAGS_1 {
460 p.flags(val, 0, FLAGS_DF_1);
461 }
462 }
463 } else {
464 p.field_hex("Tag", tag);
465 p.field_hex("Value", val);
466 }
467 });
468 if tag == DT_NULL.into() {
469 break;
470 }
471 }
472 }
473 }
474
print_section_headers<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, elf: &Elf, sections: &SectionTable<Elf>, )475 fn print_section_headers<Elf: FileHeader>(
476 p: &mut Printer<impl Write>,
477 endian: Elf::Endian,
478 data: Bytes,
479 elf: &Elf,
480 sections: &SectionTable<Elf>,
481 ) {
482 for (index, section) in sections.iter().enumerate() {
483 p.group("SectionHeader", |p| {
484 p.field("Index", index);
485 p.field_string(
486 "Name",
487 section.sh_name(endian),
488 sections.section_name(endian, section).ok(),
489 );
490
491 let proc = match elf.e_machine(endian) {
492 EM_MIPS => FLAGS_SHT_MIPS,
493 EM_PARISC => FLAGS_SHT_PARISC,
494 EM_ALPHA => FLAGS_SHT_ALPHA,
495 EM_ARM => FLAGS_SHT_ARM,
496 EM_CSKY => FLAGS_SHT_CSKY,
497 EM_IA_64 => FLAGS_SHT_IA_64,
498 EM_X86_64 => FLAGS_SHT_X86_64,
499 _ => &[],
500 };
501 p.field_enums("Type", section.sh_type(endian), &[FLAGS_SHT, proc]);
502
503 let flags = section.sh_flags(endian).into();
504 p.field_hex("Flags", flags);
505 p.flags(flags, 0, FLAGS_SHF);
506 match elf.e_machine(endian) {
507 EM_MIPS => p.flags(flags, 0, FLAGS_SHF_MIPS),
508 EM_PARISC => p.flags(flags, 0, FLAGS_SHF_PARISC),
509 EM_ALPHA => p.flags(flags, 0, FLAGS_SHF_ALPHA),
510 EM_ARM => p.flags(flags, 0, FLAGS_SHF_ARM),
511 EM_IA_64 => p.flags(flags, 0, FLAGS_SHF_IA_64),
512 _ => {}
513 }
514
515 p.field_hex("Address", section.sh_addr(endian));
516 p.field_hex("Offset", section.sh_offset(endian));
517 p.field_hex("Size", section.sh_size(endian));
518 p.field("Link", section.sh_link(endian));
519 p.field("Info", section.sh_info(endian));
520 p.field_hex("AddressAlign", section.sh_addralign(endian));
521 p.field_hex("EntrySize", section.sh_entsize(endian));
522
523 match section.sh_type(endian) {
524 SHT_SYMTAB | SHT_DYNSYM => {
525 print_section_symbols(p, endian, data, elf, sections, index, section)
526 }
527 SHT_REL => print_section_rel(p, endian, data, elf, sections, section),
528 SHT_RELA => print_section_rela(p, endian, data, elf, sections, section),
529 SHT_NOTE => print_section_notes(p, endian, data, elf, section),
530 SHT_GROUP => print_section_group(p, endian, data, elf, sections, section),
531 // TODO:
532 //SHT_HASH =>
533 //SHT_DYNAMIC =>
534 //SHT_SHLIB =>
535 //SHT_INIT_ARRAY =>
536 //SHT_FINI_ARRAY =>
537 //SHT_PREINIT_ARRAY =>
538 _ => {}
539 }
540 });
541 }
542 }
543
print_section_symbols<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, elf: &Elf, sections: &SectionTable<Elf>, section_index: usize, section: &Elf::SectionHeader, )544 fn print_section_symbols<Elf: FileHeader>(
545 p: &mut Printer<impl Write>,
546 endian: Elf::Endian,
547 data: Bytes,
548 elf: &Elf,
549 sections: &SectionTable<Elf>,
550 section_index: usize,
551 section: &Elf::SectionHeader,
552 ) {
553 if let Ok(Some(symbols)) = section.symbols(endian, data, sections, section_index) {
554 let os_stt = match elf.e_ident().os_abi {
555 ELFOSABI_GNU => FLAGS_STT_GNU,
556 ELFOSABI_HPUX => FLAGS_STT_HP,
557 _ => &[],
558 };
559 let proc_stt = match elf.e_machine(endian) {
560 EM_SPARC => FLAGS_STT_SPARC,
561 EM_PARISC => FLAGS_STT_PARISC,
562 EM_ARM => FLAGS_STT_ARM,
563 _ => &[],
564 };
565 let os_stb = match elf.e_ident().os_abi {
566 ELFOSABI_GNU => FLAGS_STB_GNU,
567 _ => &[],
568 };
569 let proc_stb = match elf.e_machine(endian) {
570 EM_MIPS => FLAGS_STB_MIPS,
571 _ => &[],
572 };
573 let proc_shn = match elf.e_machine(endian) {
574 EM_MIPS => FLAGS_SHN_MIPS,
575 EM_PARISC => FLAGS_SHN_PARISC,
576 _ => &[],
577 };
578 for (index, symbol) in symbols.iter().enumerate() {
579 p.group("Symbol", |p| {
580 p.field("Index", index);
581 p.field_string(
582 "Name",
583 symbol.st_name(endian),
584 symbol.name(endian, symbols.strings()).ok(),
585 );
586 p.field_hex("Value", symbol.st_value(endian));
587 p.field_hex("Size", symbol.st_size(endian));
588 p.field_enums("Type", symbol.st_type(), &[FLAGS_STT, os_stt, proc_stt]);
589 p.field_enums("Bind", symbol.st_bind(), &[FLAGS_STB, os_stb, proc_stb]);
590
591 let other = symbol.st_other();
592 if other & !0x3 == 0 {
593 p.field_enum("Other", other, FLAGS_STV);
594 } else {
595 p.field_hex("Other", other);
596 p.flags(other, 0x3, FLAGS_STV);
597 match elf.e_machine(endian) {
598 EM_MIPS => p.flags(other, 0, FLAGS_STO_MIPS),
599 EM_ALPHA => p.flags(other, 0, FLAGS_STO_ALPHA),
600 EM_PPC64 => p.field_hex(
601 "Local",
602 (other & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT,
603 ),
604 _ => {}
605 }
606 }
607
608 let shndx = symbol.st_shndx(endian);
609 if shndx == SHN_UNDEF || shndx >= SHN_LORESERVE {
610 p.field_enums("SectionIndex", shndx, &[FLAGS_SHN, proc_shn]);
611 } else {
612 p.field("SectionIndex", shndx);
613 }
614 if let Some(shndx) = symbols.shndx(index) {
615 p.field("ExtendedSectionIndex", shndx);
616 }
617 });
618 }
619 }
620 }
621
print_section_rel<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, elf: &Elf, sections: &SectionTable<Elf>, section: &Elf::SectionHeader, )622 fn print_section_rel<Elf: FileHeader>(
623 p: &mut Printer<impl Write>,
624 endian: Elf::Endian,
625 data: Bytes,
626 elf: &Elf,
627 sections: &SectionTable<Elf>,
628 section: &Elf::SectionHeader,
629 ) {
630 if let Ok(Some(relocations)) = section.rel(endian, data) {
631 let symbols = section.relocation_symbols(endian, data, sections).ok();
632 let proc = rel_flag_type(endian, elf);
633 for relocation in relocations {
634 p.group("Relocation", |p| {
635 p.field_hex("Offset", relocation.r_offset(endian));
636 p.field_enum("Type", relocation.r_type(endian), proc);
637 let sym = relocation.r_sym(endian);
638 p.field_string("Symbol", sym, rel_symbol(endian, symbols, sym as usize));
639 });
640 }
641 }
642 }
643
print_section_rela<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, elf: &Elf, sections: &SectionTable<Elf>, section: &Elf::SectionHeader, )644 fn print_section_rela<Elf: FileHeader>(
645 p: &mut Printer<impl Write>,
646 endian: Elf::Endian,
647 data: Bytes,
648 elf: &Elf,
649 sections: &SectionTable<Elf>,
650 section: &Elf::SectionHeader,
651 ) {
652 if let Ok(Some(relocations)) = section.rela(endian, data) {
653 let symbols = section.relocation_symbols(endian, data, sections).ok();
654 let proc = rel_flag_type(endian, elf);
655 for relocation in relocations {
656 p.group("Relocation", |p| {
657 p.field_hex("Offset", relocation.r_offset(endian));
658 p.field_enum("Type", relocation.r_type(endian), proc);
659 let sym = relocation.r_sym(endian);
660 p.field_string("Symbol", sym, rel_symbol(endian, symbols, sym as usize));
661 let addend = relocation.r_addend(endian).into() as u64;
662 if addend != 0 {
663 p.field_hex("Addend", addend);
664 }
665 });
666 }
667 }
668 }
669
rel_symbol<'data, Elf: FileHeader>( endian: Elf::Endian, symbols: Option<SymbolTable<'data, Elf>>, sym: usize, ) -> Option<&'data [u8]>670 fn rel_symbol<'data, Elf: FileHeader>(
671 endian: Elf::Endian,
672 symbols: Option<SymbolTable<'data, Elf>>,
673 sym: usize,
674 ) -> Option<&'data [u8]> {
675 let symbols = symbols?;
676 let symbol = symbols.symbol(sym as usize).ok()?;
677 symbol.name(endian, symbols.strings()).ok()
678 }
679
rel_flag_type<Elf: FileHeader>(endian: Elf::Endian, elf: &Elf) -> &'static [Flag<u32>]680 fn rel_flag_type<Elf: FileHeader>(endian: Elf::Endian, elf: &Elf) -> &'static [Flag<u32>] {
681 match elf.e_machine(endian) {
682 EM_68K => FLAGS_R_68K,
683 EM_386 => FLAGS_R_386,
684 EM_SPARC => FLAGS_R_SPARC,
685 EM_MIPS => FLAGS_R_MIPS,
686 EM_PARISC => FLAGS_R_PARISC,
687 EM_ALPHA => FLAGS_R_ALPHA,
688 EM_PPC => FLAGS_R_PPC,
689 EM_PPC64 => FLAGS_R_PPC64,
690 EM_AARCH64 => FLAGS_R_AARCH64,
691 EM_ARM => FLAGS_R_ARM,
692 EM_CSKY => FLAGS_R_CKCORE,
693 EM_IA_64 => FLAGS_R_IA64,
694 EM_SH => FLAGS_R_SH,
695 EM_S390 => FLAGS_R_390,
696 EM_CRIS => FLAGS_R_CRIS,
697 EM_X86_64 => FLAGS_R_X86_64,
698 EM_MN10300 => FLAGS_R_MN10300,
699 EM_M32R => FLAGS_R_M32R,
700 EM_MICROBLAZE => FLAGS_R_MICROBLAZE,
701 EM_ALTERA_NIOS2 => FLAGS_R_NIOS2,
702 EM_TILEPRO => FLAGS_R_TILEPRO,
703 EM_TILEGX => FLAGS_R_TILEGX,
704 EM_RISCV => FLAGS_R_RISCV,
705 EM_BPF => FLAGS_R_BPF,
706 EM_METAG => FLAGS_R_METAG,
707 EM_NDS32 => FLAGS_R_NDS32,
708 _ => &[],
709 }
710 }
711
print_section_notes<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, _elf: &Elf, section: &Elf::SectionHeader, )712 fn print_section_notes<Elf: FileHeader>(
713 p: &mut Printer<impl Write>,
714 endian: Elf::Endian,
715 data: Bytes,
716 _elf: &Elf,
717 section: &Elf::SectionHeader,
718 ) {
719 if let Ok(Some(notes)) = section.notes(endian, data) {
720 print_notes(p, endian, notes);
721 }
722 }
723
print_section_group<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, data: Bytes, _elf: &Elf, sections: &SectionTable<Elf>, section: &Elf::SectionHeader, )724 fn print_section_group<Elf: FileHeader>(
725 p: &mut Printer<impl Write>,
726 endian: Elf::Endian,
727 data: Bytes,
728 _elf: &Elf,
729 sections: &SectionTable<Elf>,
730 section: &Elf::SectionHeader,
731 ) {
732 if let Ok(Some((flag, members))) = section.group(endian, data) {
733 p.field_enum("GroupFlag", flag, FLAGS_GRP);
734 p.group("GroupSections", |p| {
735 for member in members {
736 let index = member.get(endian);
737 p.print_indent();
738 if let Ok(section) = sections.section(index as usize) {
739 if let Ok(name) = sections.section_name(endian, section) {
740 p.print_string(name);
741 writeln!(p.w, " ({})", index).unwrap();
742 } else {
743 writeln!(p.w, "{}", index).unwrap();
744 }
745 } else {
746 writeln!(p.w, "{}", index).unwrap();
747 }
748 }
749 });
750 }
751 }
752
print_notes<Elf: FileHeader>( p: &mut Printer<impl Write>, endian: Elf::Endian, mut notes: NoteIterator<Elf>, )753 fn print_notes<Elf: FileHeader>(
754 p: &mut Printer<impl Write>,
755 endian: Elf::Endian,
756 mut notes: NoteIterator<Elf>,
757 ) {
758 while let Ok(Some(note)) = notes.next() {
759 p.group("Note", |p| {
760 let name = note.name();
761 p.field_string("Name", note.n_namesz(endian), Some(name));
762 let flags = if name == ELF_NOTE_CORE || name == ELF_NOTE_LINUX {
763 FLAGS_NT_CORE
764 } else if name == ELF_NOTE_SOLARIS {
765 FLAGS_NT_SOLARIS
766 } else if name == ELF_NOTE_GNU {
767 FLAGS_NT_GNU
768 } else {
769 // TODO: NT_VERSION
770 &[]
771 };
772 p.field_enum("Type", note.n_type(endian), flags);
773 // TODO: interpret desc
774 p.field_bytes("Desc", note.desc());
775 });
776 }
777 }
778
779 static FLAGS_EI_CLASS: &[Flag<u8>] = &flags!(ELFCLASSNONE, ELFCLASS32, ELFCLASS64);
780 static FLAGS_EI_DATA: &[Flag<u8>] = &flags!(ELFDATANONE, ELFDATA2LSB, ELFDATA2MSB);
781 static FLAGS_EV: &[Flag<u8>] = &flags!(EV_NONE, EV_CURRENT);
782 static FLAGS_EI_OSABI: &[Flag<u8>] = &flags!(
783 ELFOSABI_SYSV,
784 ELFOSABI_HPUX,
785 ELFOSABI_NETBSD,
786 ELFOSABI_GNU,
787 ELFOSABI_SOLARIS,
788 ELFOSABI_AIX,
789 ELFOSABI_IRIX,
790 ELFOSABI_FREEBSD,
791 ELFOSABI_TRU64,
792 ELFOSABI_MODESTO,
793 ELFOSABI_OPENBSD,
794 ELFOSABI_ARM_AEABI,
795 ELFOSABI_ARM,
796 ELFOSABI_STANDALONE,
797 );
798 static FLAGS_ET: &[Flag<u16>] = &flags!(ET_NONE, ET_REL, ET_EXEC, ET_DYN, ET_CORE);
799 static FLAGS_EM: &[Flag<u16>] = &flags!(
800 EM_NONE,
801 EM_M32,
802 EM_SPARC,
803 EM_386,
804 EM_68K,
805 EM_88K,
806 EM_IAMCU,
807 EM_860,
808 EM_MIPS,
809 EM_S370,
810 EM_MIPS_RS3_LE,
811 EM_PARISC,
812 EM_VPP500,
813 EM_SPARC32PLUS,
814 EM_960,
815 EM_PPC,
816 EM_PPC64,
817 EM_S390,
818 EM_SPU,
819 EM_V800,
820 EM_FR20,
821 EM_RH32,
822 EM_RCE,
823 EM_ARM,
824 EM_FAKE_ALPHA,
825 EM_SH,
826 EM_SPARCV9,
827 EM_TRICORE,
828 EM_ARC,
829 EM_H8_300,
830 EM_H8_300H,
831 EM_H8S,
832 EM_H8_500,
833 EM_IA_64,
834 EM_MIPS_X,
835 EM_COLDFIRE,
836 EM_68HC12,
837 EM_MMA,
838 EM_PCP,
839 EM_NCPU,
840 EM_NDR1,
841 EM_STARCORE,
842 EM_ME16,
843 EM_ST100,
844 EM_TINYJ,
845 EM_X86_64,
846 EM_PDSP,
847 EM_PDP10,
848 EM_PDP11,
849 EM_FX66,
850 EM_ST9PLUS,
851 EM_ST7,
852 EM_68HC16,
853 EM_68HC11,
854 EM_68HC08,
855 EM_68HC05,
856 EM_SVX,
857 EM_ST19,
858 EM_VAX,
859 EM_CRIS,
860 EM_JAVELIN,
861 EM_FIREPATH,
862 EM_ZSP,
863 EM_MMIX,
864 EM_HUANY,
865 EM_PRISM,
866 EM_AVR,
867 EM_FR30,
868 EM_D10V,
869 EM_D30V,
870 EM_V850,
871 EM_M32R,
872 EM_MN10300,
873 EM_MN10200,
874 EM_PJ,
875 EM_OPENRISC,
876 EM_ARC_COMPACT,
877 EM_XTENSA,
878 EM_VIDEOCORE,
879 EM_TMM_GPP,
880 EM_NS32K,
881 EM_TPC,
882 EM_SNP1K,
883 EM_ST200,
884 EM_IP2K,
885 EM_MAX,
886 EM_CR,
887 EM_F2MC16,
888 EM_MSP430,
889 EM_BLACKFIN,
890 EM_SE_C33,
891 EM_SEP,
892 EM_ARCA,
893 EM_UNICORE,
894 EM_EXCESS,
895 EM_DXP,
896 EM_ALTERA_NIOS2,
897 EM_CRX,
898 EM_XGATE,
899 EM_C166,
900 EM_M16C,
901 EM_DSPIC30F,
902 EM_CE,
903 EM_M32C,
904 EM_TSK3000,
905 EM_RS08,
906 EM_SHARC,
907 EM_ECOG2,
908 EM_SCORE7,
909 EM_DSP24,
910 EM_VIDEOCORE3,
911 EM_LATTICEMICO32,
912 EM_SE_C17,
913 EM_TI_C6000,
914 EM_TI_C2000,
915 EM_TI_C5500,
916 EM_TI_ARP32,
917 EM_TI_PRU,
918 EM_MMDSP_PLUS,
919 EM_CYPRESS_M8C,
920 EM_R32C,
921 EM_TRIMEDIA,
922 EM_QDSP6,
923 EM_8051,
924 EM_STXP7X,
925 EM_NDS32,
926 EM_ECOG1X,
927 EM_MAXQ30,
928 EM_XIMO16,
929 EM_MANIK,
930 EM_CRAYNV2,
931 EM_RX,
932 EM_METAG,
933 EM_MCST_ELBRUS,
934 EM_ECOG16,
935 EM_CR16,
936 EM_ETPU,
937 EM_SLE9X,
938 EM_L10M,
939 EM_K10M,
940 EM_AARCH64,
941 EM_AVR32,
942 EM_STM8,
943 EM_TILE64,
944 EM_TILEPRO,
945 EM_MICROBLAZE,
946 EM_CUDA,
947 EM_TILEGX,
948 EM_CLOUDSHIELD,
949 EM_COREA_1ST,
950 EM_COREA_2ND,
951 EM_ARC_COMPACT2,
952 EM_OPEN8,
953 EM_RL78,
954 EM_VIDEOCORE5,
955 EM_78KOR,
956 EM_56800EX,
957 EM_BA1,
958 EM_BA2,
959 EM_XCORE,
960 EM_MCHP_PIC,
961 EM_KM32,
962 EM_KMX32,
963 EM_EMX16,
964 EM_EMX8,
965 EM_KVARC,
966 EM_CDP,
967 EM_COGE,
968 EM_COOL,
969 EM_NORC,
970 EM_CSR_KALIMBA,
971 EM_Z80,
972 EM_VISIUM,
973 EM_FT32,
974 EM_MOXIE,
975 EM_AMDGPU,
976 EM_RISCV,
977 EM_BPF,
978 EM_CSKY,
979 EM_ALPHA,
980 );
981 static FLAGS_EF_SPARC: &[Flag<u32>] = &flags!(
982 EF_SPARC_LEDATA,
983 EF_SPARC_EXT_MASK,
984 EF_SPARC_32PLUS,
985 EF_SPARC_SUN_US1,
986 EF_SPARC_HAL_R1,
987 EF_SPARC_SUN_US3,
988 );
989 static FLAGS_EF_SPARCV9: &[Flag<u32>] = &flags!(
990 EF_SPARCV9_MM,
991 EF_SPARCV9_TSO,
992 EF_SPARCV9_PSO,
993 EF_SPARCV9_RMO,
994 );
995 static FLAGS_EF_MIPS: &[Flag<u32>] = &flags!(
996 EF_MIPS_NOREORDER,
997 EF_MIPS_PIC,
998 EF_MIPS_CPIC,
999 EF_MIPS_XGOT,
1000 EF_MIPS_64BIT_WHIRL,
1001 EF_MIPS_ABI2,
1002 EF_MIPS_ABI_ON32,
1003 EF_MIPS_FP64,
1004 EF_MIPS_NAN2008,
1005 );
1006 static FLAGS_EF_MIPS_ARCH: &[Flag<u32>] = &flags!(
1007 EF_MIPS_ARCH_1,
1008 EF_MIPS_ARCH_2,
1009 EF_MIPS_ARCH_3,
1010 EF_MIPS_ARCH_4,
1011 EF_MIPS_ARCH_5,
1012 EF_MIPS_ARCH_32,
1013 EF_MIPS_ARCH_64,
1014 EF_MIPS_ARCH_32R2,
1015 EF_MIPS_ARCH_64R2,
1016 );
1017 static FLAGS_EF_PARISC: &[Flag<u32>] = &flags!(
1018 EF_PARISC_TRAPNIL,
1019 EF_PARISC_EXT,
1020 EF_PARISC_LSB,
1021 EF_PARISC_WIDE,
1022 EF_PARISC_NO_KABP,
1023 EF_PARISC_LAZYSWAP,
1024 );
1025 static FLAGS_EF_PARISC_ARCH: &[Flag<u32>] =
1026 &flags!(EFA_PARISC_1_0, EFA_PARISC_1_1, EFA_PARISC_2_0);
1027 static FLAGS_EF_ALPHA: &[Flag<u32>] = &flags!(EF_ALPHA_32BIT, EF_ALPHA_CANRELAX);
1028 static FLAGS_EF_PPC: &[Flag<u32>] =
1029 &flags!(EF_PPC_EMB, EF_PPC_RELOCATABLE, EF_PPC_RELOCATABLE_LIB);
1030 static FLAGS_EF_PPC64: &[Flag<u32>] = &flags!(EF_PPC64_ABI);
1031 static FLAGS_EF_ARM: &[Flag<u32>] = &flags!(
1032 EF_ARM_RELEXEC,
1033 EF_ARM_HASENTRY,
1034 EF_ARM_INTERWORK,
1035 EF_ARM_APCS_26,
1036 EF_ARM_APCS_FLOAT,
1037 EF_ARM_PIC,
1038 EF_ARM_ALIGN8,
1039 EF_ARM_NEW_ABI,
1040 EF_ARM_OLD_ABI,
1041 EF_ARM_SOFT_FLOAT,
1042 EF_ARM_VFP_FLOAT,
1043 EF_ARM_MAVERICK_FLOAT,
1044 EF_ARM_BE8,
1045 EF_ARM_LE8,
1046 );
1047 static FLAGS_EF_ARM_EABI: &[Flag<u32>] = &flags!(
1048 EF_ARM_EABI_UNKNOWN,
1049 EF_ARM_EABI_VER1,
1050 EF_ARM_EABI_VER2,
1051 EF_ARM_EABI_VER3,
1052 EF_ARM_EABI_VER4,
1053 EF_ARM_EABI_VER5,
1054 );
1055 static FLAGS_EF_CSKY_ABI: &[Flag<u32>] = &flags!(EF_CSKY_ABIV1, EF_CSKY_ABIV2);
1056 static FLAGS_EF_IA_64: &[Flag<u32>] = &flags!(EF_IA_64_ABI64);
1057 static FLAGS_EF_SH_MACH: &[Flag<u32>] = &flags!(
1058 EF_SH_UNKNOWN,
1059 EF_SH1,
1060 EF_SH2,
1061 EF_SH3,
1062 EF_SH_DSP,
1063 EF_SH3_DSP,
1064 EF_SH4AL_DSP,
1065 EF_SH3E,
1066 EF_SH4,
1067 EF_SH2E,
1068 EF_SH4A,
1069 EF_SH2A,
1070 EF_SH4_NOFPU,
1071 EF_SH4A_NOFPU,
1072 EF_SH4_NOMMU_NOFPU,
1073 EF_SH2A_NOFPU,
1074 EF_SH3_NOMMU,
1075 EF_SH2A_SH4_NOFPU,
1076 EF_SH2A_SH3_NOFPU,
1077 EF_SH2A_SH4,
1078 EF_SH2A_SH3E,
1079 );
1080 static FLAGS_EF_S390: &[Flag<u32>] = &flags!(EF_S390_HIGH_GPRS);
1081 static FLAGS_EF_RISCV: &[Flag<u32>] = &flags!(EF_RISCV_RVC);
1082 static FLAGS_EF_RISCV_FLOAT_ABI: &[Flag<u32>] = &flags!(
1083 EF_RISCV_FLOAT_ABI_SOFT,
1084 EF_RISCV_FLOAT_ABI_SINGLE,
1085 EF_RISCV_FLOAT_ABI_DOUBLE,
1086 EF_RISCV_FLOAT_ABI_QUAD,
1087 );
1088 static FLAGS_PT: &[Flag<u32>] = &flags!(
1089 PT_NULL,
1090 PT_LOAD,
1091 PT_DYNAMIC,
1092 PT_INTERP,
1093 PT_NOTE,
1094 PT_SHLIB,
1095 PT_PHDR,
1096 PT_TLS,
1097 PT_LOOS,
1098 PT_GNU_EH_FRAME,
1099 PT_GNU_STACK,
1100 PT_GNU_RELRO,
1101 );
1102 static FLAGS_PT_HP: &[Flag<u32>] = &flags!(
1103 PT_HP_TLS,
1104 PT_HP_CORE_NONE,
1105 PT_HP_CORE_VERSION,
1106 PT_HP_CORE_KERNEL,
1107 PT_HP_CORE_COMM,
1108 PT_HP_CORE_PROC,
1109 PT_HP_CORE_LOADABLE,
1110 PT_HP_CORE_STACK,
1111 PT_HP_CORE_SHM,
1112 PT_HP_CORE_MMF,
1113 PT_HP_PARALLEL,
1114 PT_HP_FASTBIND,
1115 PT_HP_OPT_ANNOT,
1116 PT_HP_HSL_ANNOT,
1117 PT_HP_STACK,
1118 );
1119 static FLAGS_PT_MIPS: &[Flag<u32>] = &flags!(
1120 PT_MIPS_REGINFO,
1121 PT_MIPS_RTPROC,
1122 PT_MIPS_OPTIONS,
1123 PT_MIPS_ABIFLAGS,
1124 );
1125 static FLAGS_PT_PARISC: &[Flag<u32>] = &flags!(PT_PARISC_ARCHEXT, PT_PARISC_UNWIND);
1126 static FLAGS_PT_ARM: &[Flag<u32>] = &flags!(PT_ARM_EXIDX);
1127 static FLAGS_PT_IA_64: &[Flag<u32>] = &flags!(PT_IA_64_ARCHEXT, PT_IA_64_UNWIND);
1128 static FLAGS_PF: &[Flag<u32>] = &flags!(PF_X, PF_W, PF_R);
1129 static FLAGS_PF_HP: &[Flag<u32>] = &flags!(
1130 PF_HP_PAGE_SIZE,
1131 PF_HP_FAR_SHARED,
1132 PF_HP_NEAR_SHARED,
1133 PF_HP_CODE,
1134 PF_HP_MODIFY,
1135 PF_HP_LAZYSWAP,
1136 PF_HP_SBP,
1137 );
1138 static FLAGS_PF_MIPS: &[Flag<u32>] = &flags!(PF_MIPS_LOCAL);
1139 static FLAGS_PF_PARISC: &[Flag<u32>] = &flags!(PF_PARISC_SBP);
1140 static FLAGS_PF_ARM: &[Flag<u32>] = &flags!(PF_ARM_SB, PF_ARM_PI, PF_ARM_ABS);
1141 static FLAGS_PF_IA_64: &[Flag<u32>] = &flags!(PF_IA_64_NORECOV);
1142 static FLAGS_SHT: &[Flag<u32>] = &flags!(
1143 SHT_NULL,
1144 SHT_PROGBITS,
1145 SHT_SYMTAB,
1146 SHT_STRTAB,
1147 SHT_RELA,
1148 SHT_HASH,
1149 SHT_DYNAMIC,
1150 SHT_NOTE,
1151 SHT_NOBITS,
1152 SHT_REL,
1153 SHT_SHLIB,
1154 SHT_DYNSYM,
1155 SHT_INIT_ARRAY,
1156 SHT_FINI_ARRAY,
1157 SHT_PREINIT_ARRAY,
1158 SHT_GROUP,
1159 SHT_SYMTAB_SHNDX,
1160 );
1161 static FLAGS_SHT_MIPS: &[Flag<u32>] = &flags!(
1162 SHT_MIPS_LIBLIST,
1163 SHT_MIPS_MSYM,
1164 SHT_MIPS_CONFLICT,
1165 SHT_MIPS_GPTAB,
1166 SHT_MIPS_UCODE,
1167 SHT_MIPS_DEBUG,
1168 SHT_MIPS_REGINFO,
1169 SHT_MIPS_PACKAGE,
1170 SHT_MIPS_PACKSYM,
1171 SHT_MIPS_RELD,
1172 SHT_MIPS_IFACE,
1173 SHT_MIPS_CONTENT,
1174 SHT_MIPS_OPTIONS,
1175 SHT_MIPS_SHDR,
1176 SHT_MIPS_FDESC,
1177 SHT_MIPS_EXTSYM,
1178 SHT_MIPS_DENSE,
1179 SHT_MIPS_PDESC,
1180 SHT_MIPS_LOCSYM,
1181 SHT_MIPS_AUXSYM,
1182 SHT_MIPS_OPTSYM,
1183 SHT_MIPS_LOCSTR,
1184 SHT_MIPS_LINE,
1185 SHT_MIPS_RFDESC,
1186 SHT_MIPS_DELTASYM,
1187 SHT_MIPS_DELTAINST,
1188 SHT_MIPS_DELTACLASS,
1189 SHT_MIPS_DWARF,
1190 SHT_MIPS_DELTADECL,
1191 SHT_MIPS_SYMBOL_LIB,
1192 SHT_MIPS_EVENTS,
1193 SHT_MIPS_TRANSLATE,
1194 SHT_MIPS_PIXIE,
1195 SHT_MIPS_XLATE,
1196 SHT_MIPS_XLATE_DEBUG,
1197 SHT_MIPS_WHIRL,
1198 SHT_MIPS_EH_REGION,
1199 SHT_MIPS_XLATE_OLD,
1200 SHT_MIPS_PDR_EXCEPTION,
1201 );
1202 static FLAGS_SHT_PARISC: &[Flag<u32>] =
1203 &flags!(SHT_PARISC_EXT, SHT_PARISC_UNWIND, SHT_PARISC_DOC);
1204 static FLAGS_SHT_ALPHA: &[Flag<u32>] = &flags!(SHT_ALPHA_DEBUG, SHT_ALPHA_REGINFO);
1205 static FLAGS_SHT_ARM: &[Flag<u32>] =
1206 &flags!(SHT_ARM_EXIDX, SHT_ARM_PREEMPTMAP, SHT_ARM_ATTRIBUTES);
1207 static FLAGS_SHT_CSKY: &[Flag<u32>] = &flags!(SHT_CSKY_ATTRIBUTES);
1208 static FLAGS_SHT_IA_64: &[Flag<u32>] = &flags!(SHT_IA_64_EXT, SHT_IA_64_UNWIND);
1209 static FLAGS_SHT_X86_64: &[Flag<u32>] = &flags!(SHT_X86_64_UNWIND);
1210 static FLAGS_SHF: &[Flag<u32>] = &flags!(
1211 SHF_WRITE,
1212 SHF_ALLOC,
1213 SHF_EXECINSTR,
1214 SHF_MERGE,
1215 SHF_STRINGS,
1216 SHF_INFO_LINK,
1217 SHF_LINK_ORDER,
1218 SHF_OS_NONCONFORMING,
1219 SHF_GROUP,
1220 SHF_TLS,
1221 SHF_COMPRESSED,
1222 );
1223 static FLAGS_SHF_MIPS: &[Flag<u32>] = &flags!(
1224 SHF_MIPS_GPREL,
1225 SHF_MIPS_MERGE,
1226 SHF_MIPS_ADDR,
1227 SHF_MIPS_STRINGS,
1228 SHF_MIPS_NOSTRIP,
1229 SHF_MIPS_LOCAL,
1230 SHF_MIPS_NAMES,
1231 SHF_MIPS_NODUPE,
1232 );
1233 static FLAGS_SHF_PARISC: &[Flag<u32>] =
1234 &flags!(SHF_PARISC_SHORT, SHF_PARISC_HUGE, SHF_PARISC_SBP);
1235 static FLAGS_SHF_ALPHA: &[Flag<u32>] = &flags!(SHF_ALPHA_GPREL);
1236 static FLAGS_SHF_ARM: &[Flag<u32>] = &flags!(SHF_ARM_ENTRYSECT, SHF_ARM_COMDEF);
1237 static FLAGS_SHF_IA_64: &[Flag<u32>] = &flags!(SHF_IA_64_SHORT, SHF_IA_64_NORECOV);
1238 static FLAGS_STT: &[Flag<u8>] = &flags!(
1239 STT_NOTYPE,
1240 STT_OBJECT,
1241 STT_FUNC,
1242 STT_SECTION,
1243 STT_FILE,
1244 STT_COMMON,
1245 STT_TLS,
1246 );
1247 static FLAGS_STT_GNU: &[Flag<u8>] = &flags!(STT_GNU_IFUNC);
1248 static FLAGS_STT_HP: &[Flag<u8>] = &flags!(STT_HP_OPAQUE, STT_HP_STUB);
1249 static FLAGS_STT_SPARC: &[Flag<u8>] = &flags!(STT_SPARC_REGISTER);
1250 static FLAGS_STT_PARISC: &[Flag<u8>] = &flags!(STT_PARISC_MILLICODE);
1251 static FLAGS_STT_ARM: &[Flag<u8>] = &flags!(STT_ARM_TFUNC, STT_ARM_16BIT);
1252 static FLAGS_STB: &[Flag<u8>] = &flags!(STB_LOCAL, STB_GLOBAL, STB_WEAK);
1253 static FLAGS_STB_GNU: &[Flag<u8>] = &flags!(STB_GNU_UNIQUE);
1254 static FLAGS_STB_MIPS: &[Flag<u8>] = &flags!(STB_MIPS_SPLIT_COMMON);
1255 static FLAGS_STV: &[Flag<u8>] = &flags!(STV_DEFAULT, STV_INTERNAL, STV_HIDDEN, STV_PROTECTED);
1256 static FLAGS_STO_MIPS: &[Flag<u8>] = &flags!(STO_MIPS_PLT);
1257 static FLAGS_STO_ALPHA: &[Flag<u8>] = &flags!(STO_ALPHA_NOPV, STO_ALPHA_STD_GPLOAD);
1258 static FLAGS_SHN: &[Flag<u16>] = &flags!(SHN_UNDEF, SHN_ABS, SHN_COMMON, SHN_XINDEX);
1259 static FLAGS_SHN_MIPS: &[Flag<u16>] = &flags!(
1260 SHN_MIPS_ACOMMON,
1261 SHN_MIPS_TEXT,
1262 SHN_MIPS_DATA,
1263 SHN_MIPS_SCOMMON,
1264 SHN_MIPS_SUNDEFINED,
1265 );
1266 static FLAGS_SHN_PARISC: &[Flag<u16>] = &flags!(SHN_PARISC_ANSI_COMMON, SHN_PARISC_HUGE_COMMON);
1267 static FLAGS_R_68K: &[Flag<u32>] = &flags!(
1268 R_68K_NONE,
1269 R_68K_32,
1270 R_68K_16,
1271 R_68K_8,
1272 R_68K_PC32,
1273 R_68K_PC16,
1274 R_68K_PC8,
1275 R_68K_GOT32,
1276 R_68K_GOT16,
1277 R_68K_GOT8,
1278 R_68K_GOT32O,
1279 R_68K_GOT16O,
1280 R_68K_GOT8O,
1281 R_68K_PLT32,
1282 R_68K_PLT16,
1283 R_68K_PLT8,
1284 R_68K_PLT32O,
1285 R_68K_PLT16O,
1286 R_68K_PLT8O,
1287 R_68K_COPY,
1288 R_68K_GLOB_DAT,
1289 R_68K_JMP_SLOT,
1290 R_68K_RELATIVE,
1291 R_68K_TLS_GD32,
1292 R_68K_TLS_GD16,
1293 R_68K_TLS_GD8,
1294 R_68K_TLS_LDM32,
1295 R_68K_TLS_LDM16,
1296 R_68K_TLS_LDM8,
1297 R_68K_TLS_LDO32,
1298 R_68K_TLS_LDO16,
1299 R_68K_TLS_LDO8,
1300 R_68K_TLS_IE32,
1301 R_68K_TLS_IE16,
1302 R_68K_TLS_IE8,
1303 R_68K_TLS_LE32,
1304 R_68K_TLS_LE16,
1305 R_68K_TLS_LE8,
1306 R_68K_TLS_DTPMOD32,
1307 R_68K_TLS_DTPREL32,
1308 R_68K_TLS_TPREL32,
1309 );
1310 static FLAGS_R_386: &[Flag<u32>] = &flags!(
1311 R_386_NONE,
1312 R_386_32,
1313 R_386_PC32,
1314 R_386_GOT32,
1315 R_386_PLT32,
1316 R_386_COPY,
1317 R_386_GLOB_DAT,
1318 R_386_JMP_SLOT,
1319 R_386_RELATIVE,
1320 R_386_GOTOFF,
1321 R_386_GOTPC,
1322 R_386_32PLT,
1323 R_386_TLS_TPOFF,
1324 R_386_TLS_IE,
1325 R_386_TLS_GOTIE,
1326 R_386_TLS_LE,
1327 R_386_TLS_GD,
1328 R_386_TLS_LDM,
1329 R_386_16,
1330 R_386_PC16,
1331 R_386_8,
1332 R_386_PC8,
1333 R_386_TLS_GD_32,
1334 R_386_TLS_GD_PUSH,
1335 R_386_TLS_GD_CALL,
1336 R_386_TLS_GD_POP,
1337 R_386_TLS_LDM_32,
1338 R_386_TLS_LDM_PUSH,
1339 R_386_TLS_LDM_CALL,
1340 R_386_TLS_LDM_POP,
1341 R_386_TLS_LDO_32,
1342 R_386_TLS_IE_32,
1343 R_386_TLS_LE_32,
1344 R_386_TLS_DTPMOD32,
1345 R_386_TLS_DTPOFF32,
1346 R_386_TLS_TPOFF32,
1347 R_386_SIZE32,
1348 R_386_TLS_GOTDESC,
1349 R_386_TLS_DESC_CALL,
1350 R_386_TLS_DESC,
1351 R_386_IRELATIVE,
1352 R_386_GOT32X,
1353 );
1354 static FLAGS_R_SPARC: &[Flag<u32>] = &flags!(
1355 R_SPARC_NONE,
1356 R_SPARC_8,
1357 R_SPARC_16,
1358 R_SPARC_32,
1359 R_SPARC_DISP8,
1360 R_SPARC_DISP16,
1361 R_SPARC_DISP32,
1362 R_SPARC_WDISP30,
1363 R_SPARC_WDISP22,
1364 R_SPARC_HI22,
1365 R_SPARC_22,
1366 R_SPARC_13,
1367 R_SPARC_LO10,
1368 R_SPARC_GOT10,
1369 R_SPARC_GOT13,
1370 R_SPARC_GOT22,
1371 R_SPARC_PC10,
1372 R_SPARC_PC22,
1373 R_SPARC_WPLT30,
1374 R_SPARC_COPY,
1375 R_SPARC_GLOB_DAT,
1376 R_SPARC_JMP_SLOT,
1377 R_SPARC_RELATIVE,
1378 R_SPARC_UA32,
1379 R_SPARC_PLT32,
1380 R_SPARC_HIPLT22,
1381 R_SPARC_LOPLT10,
1382 R_SPARC_PCPLT32,
1383 R_SPARC_PCPLT22,
1384 R_SPARC_PCPLT10,
1385 R_SPARC_10,
1386 R_SPARC_11,
1387 R_SPARC_64,
1388 R_SPARC_OLO10,
1389 R_SPARC_HH22,
1390 R_SPARC_HM10,
1391 R_SPARC_LM22,
1392 R_SPARC_PC_HH22,
1393 R_SPARC_PC_HM10,
1394 R_SPARC_PC_LM22,
1395 R_SPARC_WDISP16,
1396 R_SPARC_WDISP19,
1397 R_SPARC_GLOB_JMP,
1398 R_SPARC_7,
1399 R_SPARC_5,
1400 R_SPARC_6,
1401 R_SPARC_DISP64,
1402 R_SPARC_PLT64,
1403 R_SPARC_HIX22,
1404 R_SPARC_LOX10,
1405 R_SPARC_H44,
1406 R_SPARC_M44,
1407 R_SPARC_L44,
1408 R_SPARC_REGISTER,
1409 R_SPARC_UA64,
1410 R_SPARC_UA16,
1411 R_SPARC_TLS_GD_HI22,
1412 R_SPARC_TLS_GD_LO10,
1413 R_SPARC_TLS_GD_ADD,
1414 R_SPARC_TLS_GD_CALL,
1415 R_SPARC_TLS_LDM_HI22,
1416 R_SPARC_TLS_LDM_LO10,
1417 R_SPARC_TLS_LDM_ADD,
1418 R_SPARC_TLS_LDM_CALL,
1419 R_SPARC_TLS_LDO_HIX22,
1420 R_SPARC_TLS_LDO_LOX10,
1421 R_SPARC_TLS_LDO_ADD,
1422 R_SPARC_TLS_IE_HI22,
1423 R_SPARC_TLS_IE_LO10,
1424 R_SPARC_TLS_IE_LD,
1425 R_SPARC_TLS_IE_LDX,
1426 R_SPARC_TLS_IE_ADD,
1427 R_SPARC_TLS_LE_HIX22,
1428 R_SPARC_TLS_LE_LOX10,
1429 R_SPARC_TLS_DTPMOD32,
1430 R_SPARC_TLS_DTPMOD64,
1431 R_SPARC_TLS_DTPOFF32,
1432 R_SPARC_TLS_DTPOFF64,
1433 R_SPARC_TLS_TPOFF32,
1434 R_SPARC_TLS_TPOFF64,
1435 R_SPARC_GOTDATA_HIX22,
1436 R_SPARC_GOTDATA_LOX10,
1437 R_SPARC_GOTDATA_OP_HIX22,
1438 R_SPARC_GOTDATA_OP_LOX10,
1439 R_SPARC_GOTDATA_OP,
1440 R_SPARC_H34,
1441 R_SPARC_SIZE32,
1442 R_SPARC_SIZE64,
1443 R_SPARC_WDISP10,
1444 R_SPARC_JMP_IREL,
1445 R_SPARC_IRELATIVE,
1446 R_SPARC_GNU_VTINHERIT,
1447 R_SPARC_GNU_VTENTRY,
1448 R_SPARC_REV32,
1449 );
1450 static FLAGS_R_MIPS: &[Flag<u32>] = &flags!(
1451 R_MIPS_NONE,
1452 R_MIPS_16,
1453 R_MIPS_32,
1454 R_MIPS_REL32,
1455 R_MIPS_26,
1456 R_MIPS_HI16,
1457 R_MIPS_LO16,
1458 R_MIPS_GPREL16,
1459 R_MIPS_LITERAL,
1460 R_MIPS_GOT16,
1461 R_MIPS_PC16,
1462 R_MIPS_CALL16,
1463 R_MIPS_GPREL32,
1464 R_MIPS_SHIFT5,
1465 R_MIPS_SHIFT6,
1466 R_MIPS_64,
1467 R_MIPS_GOT_DISP,
1468 R_MIPS_GOT_PAGE,
1469 R_MIPS_GOT_OFST,
1470 R_MIPS_GOT_HI16,
1471 R_MIPS_GOT_LO16,
1472 R_MIPS_SUB,
1473 R_MIPS_INSERT_A,
1474 R_MIPS_INSERT_B,
1475 R_MIPS_DELETE,
1476 R_MIPS_HIGHER,
1477 R_MIPS_HIGHEST,
1478 R_MIPS_CALL_HI16,
1479 R_MIPS_CALL_LO16,
1480 R_MIPS_SCN_DISP,
1481 R_MIPS_REL16,
1482 R_MIPS_ADD_IMMEDIATE,
1483 R_MIPS_PJUMP,
1484 R_MIPS_RELGOT,
1485 R_MIPS_JALR,
1486 R_MIPS_TLS_DTPMOD32,
1487 R_MIPS_TLS_DTPREL32,
1488 R_MIPS_TLS_DTPMOD64,
1489 R_MIPS_TLS_DTPREL64,
1490 R_MIPS_TLS_GD,
1491 R_MIPS_TLS_LDM,
1492 R_MIPS_TLS_DTPREL_HI16,
1493 R_MIPS_TLS_DTPREL_LO16,
1494 R_MIPS_TLS_GOTTPREL,
1495 R_MIPS_TLS_TPREL32,
1496 R_MIPS_TLS_TPREL64,
1497 R_MIPS_TLS_TPREL_HI16,
1498 R_MIPS_TLS_TPREL_LO16,
1499 R_MIPS_GLOB_DAT,
1500 R_MIPS_COPY,
1501 R_MIPS_JUMP_SLOT,
1502 );
1503 static FLAGS_R_PARISC: &[Flag<u32>] = &flags!(
1504 R_PARISC_NONE,
1505 R_PARISC_DIR32,
1506 R_PARISC_DIR21L,
1507 R_PARISC_DIR17R,
1508 R_PARISC_DIR17F,
1509 R_PARISC_DIR14R,
1510 R_PARISC_PCREL32,
1511 R_PARISC_PCREL21L,
1512 R_PARISC_PCREL17R,
1513 R_PARISC_PCREL17F,
1514 R_PARISC_PCREL14R,
1515 R_PARISC_DPREL21L,
1516 R_PARISC_DPREL14R,
1517 R_PARISC_GPREL21L,
1518 R_PARISC_GPREL14R,
1519 R_PARISC_LTOFF21L,
1520 R_PARISC_LTOFF14R,
1521 R_PARISC_SECREL32,
1522 R_PARISC_SEGBASE,
1523 R_PARISC_SEGREL32,
1524 R_PARISC_PLTOFF21L,
1525 R_PARISC_PLTOFF14R,
1526 R_PARISC_LTOFF_FPTR32,
1527 R_PARISC_LTOFF_FPTR21L,
1528 R_PARISC_LTOFF_FPTR14R,
1529 R_PARISC_FPTR64,
1530 R_PARISC_PLABEL32,
1531 R_PARISC_PLABEL21L,
1532 R_PARISC_PLABEL14R,
1533 R_PARISC_PCREL64,
1534 R_PARISC_PCREL22F,
1535 R_PARISC_PCREL14WR,
1536 R_PARISC_PCREL14DR,
1537 R_PARISC_PCREL16F,
1538 R_PARISC_PCREL16WF,
1539 R_PARISC_PCREL16DF,
1540 R_PARISC_DIR64,
1541 R_PARISC_DIR14WR,
1542 R_PARISC_DIR14DR,
1543 R_PARISC_DIR16F,
1544 R_PARISC_DIR16WF,
1545 R_PARISC_DIR16DF,
1546 R_PARISC_GPREL64,
1547 R_PARISC_GPREL14WR,
1548 R_PARISC_GPREL14DR,
1549 R_PARISC_GPREL16F,
1550 R_PARISC_GPREL16WF,
1551 R_PARISC_GPREL16DF,
1552 R_PARISC_LTOFF64,
1553 R_PARISC_LTOFF14WR,
1554 R_PARISC_LTOFF14DR,
1555 R_PARISC_LTOFF16F,
1556 R_PARISC_LTOFF16WF,
1557 R_PARISC_LTOFF16DF,
1558 R_PARISC_SECREL64,
1559 R_PARISC_SEGREL64,
1560 R_PARISC_PLTOFF14WR,
1561 R_PARISC_PLTOFF14DR,
1562 R_PARISC_PLTOFF16F,
1563 R_PARISC_PLTOFF16WF,
1564 R_PARISC_PLTOFF16DF,
1565 R_PARISC_LTOFF_FPTR64,
1566 R_PARISC_LTOFF_FPTR14WR,
1567 R_PARISC_LTOFF_FPTR14DR,
1568 R_PARISC_LTOFF_FPTR16F,
1569 R_PARISC_LTOFF_FPTR16WF,
1570 R_PARISC_LTOFF_FPTR16DF,
1571 R_PARISC_COPY,
1572 R_PARISC_IPLT,
1573 R_PARISC_EPLT,
1574 R_PARISC_TPREL32,
1575 R_PARISC_TPREL21L,
1576 R_PARISC_TPREL14R,
1577 R_PARISC_LTOFF_TP21L,
1578 R_PARISC_LTOFF_TP14R,
1579 R_PARISC_LTOFF_TP14F,
1580 R_PARISC_TPREL64,
1581 R_PARISC_TPREL14WR,
1582 R_PARISC_TPREL14DR,
1583 R_PARISC_TPREL16F,
1584 R_PARISC_TPREL16WF,
1585 R_PARISC_TPREL16DF,
1586 R_PARISC_LTOFF_TP64,
1587 R_PARISC_LTOFF_TP14WR,
1588 R_PARISC_LTOFF_TP14DR,
1589 R_PARISC_LTOFF_TP16F,
1590 R_PARISC_LTOFF_TP16WF,
1591 R_PARISC_LTOFF_TP16DF,
1592 R_PARISC_GNU_VTENTRY,
1593 R_PARISC_GNU_VTINHERIT,
1594 R_PARISC_TLS_GD21L,
1595 R_PARISC_TLS_GD14R,
1596 R_PARISC_TLS_GDCALL,
1597 R_PARISC_TLS_LDM21L,
1598 R_PARISC_TLS_LDM14R,
1599 R_PARISC_TLS_LDMCALL,
1600 R_PARISC_TLS_LDO21L,
1601 R_PARISC_TLS_LDO14R,
1602 R_PARISC_TLS_DTPMOD32,
1603 R_PARISC_TLS_DTPMOD64,
1604 R_PARISC_TLS_DTPOFF32,
1605 R_PARISC_TLS_DTPOFF64,
1606 R_PARISC_TLS_LE21L,
1607 R_PARISC_TLS_LE14R,
1608 R_PARISC_TLS_IE21L,
1609 R_PARISC_TLS_IE14R,
1610 R_PARISC_TLS_TPREL32,
1611 R_PARISC_TLS_TPREL64,
1612 );
1613 static FLAGS_R_ALPHA: &[Flag<u32>] = &flags!(
1614 R_ALPHA_NONE,
1615 R_ALPHA_REFLONG,
1616 R_ALPHA_REFQUAD,
1617 R_ALPHA_GPREL32,
1618 R_ALPHA_LITERAL,
1619 R_ALPHA_LITUSE,
1620 R_ALPHA_GPDISP,
1621 R_ALPHA_BRADDR,
1622 R_ALPHA_HINT,
1623 R_ALPHA_SREL16,
1624 R_ALPHA_SREL32,
1625 R_ALPHA_SREL64,
1626 R_ALPHA_GPRELHIGH,
1627 R_ALPHA_GPRELLOW,
1628 R_ALPHA_GPREL16,
1629 R_ALPHA_COPY,
1630 R_ALPHA_GLOB_DAT,
1631 R_ALPHA_JMP_SLOT,
1632 R_ALPHA_RELATIVE,
1633 R_ALPHA_TLS_GD_HI,
1634 R_ALPHA_TLSGD,
1635 R_ALPHA_TLS_LDM,
1636 R_ALPHA_DTPMOD64,
1637 R_ALPHA_GOTDTPREL,
1638 R_ALPHA_DTPREL64,
1639 R_ALPHA_DTPRELHI,
1640 R_ALPHA_DTPRELLO,
1641 R_ALPHA_DTPREL16,
1642 R_ALPHA_GOTTPREL,
1643 R_ALPHA_TPREL64,
1644 R_ALPHA_TPRELHI,
1645 R_ALPHA_TPRELLO,
1646 R_ALPHA_TPREL16,
1647 );
1648 static FLAGS_R_PPC: &[Flag<u32>] = &flags!(
1649 R_PPC_NONE,
1650 R_PPC_ADDR32,
1651 R_PPC_ADDR24,
1652 R_PPC_ADDR16,
1653 R_PPC_ADDR16_LO,
1654 R_PPC_ADDR16_HI,
1655 R_PPC_ADDR16_HA,
1656 R_PPC_ADDR14,
1657 R_PPC_ADDR14_BRTAKEN,
1658 R_PPC_ADDR14_BRNTAKEN,
1659 R_PPC_REL24,
1660 R_PPC_REL14,
1661 R_PPC_REL14_BRTAKEN,
1662 R_PPC_REL14_BRNTAKEN,
1663 R_PPC_GOT16,
1664 R_PPC_GOT16_LO,
1665 R_PPC_GOT16_HI,
1666 R_PPC_GOT16_HA,
1667 R_PPC_PLTREL24,
1668 R_PPC_COPY,
1669 R_PPC_GLOB_DAT,
1670 R_PPC_JMP_SLOT,
1671 R_PPC_RELATIVE,
1672 R_PPC_LOCAL24PC,
1673 R_PPC_UADDR32,
1674 R_PPC_UADDR16,
1675 R_PPC_REL32,
1676 R_PPC_PLT32,
1677 R_PPC_PLTREL32,
1678 R_PPC_PLT16_LO,
1679 R_PPC_PLT16_HI,
1680 R_PPC_PLT16_HA,
1681 R_PPC_SDAREL16,
1682 R_PPC_SECTOFF,
1683 R_PPC_SECTOFF_LO,
1684 R_PPC_SECTOFF_HI,
1685 R_PPC_SECTOFF_HA,
1686 R_PPC_TLS,
1687 R_PPC_DTPMOD32,
1688 R_PPC_TPREL16,
1689 R_PPC_TPREL16_LO,
1690 R_PPC_TPREL16_HI,
1691 R_PPC_TPREL16_HA,
1692 R_PPC_TPREL32,
1693 R_PPC_DTPREL16,
1694 R_PPC_DTPREL16_LO,
1695 R_PPC_DTPREL16_HI,
1696 R_PPC_DTPREL16_HA,
1697 R_PPC_DTPREL32,
1698 R_PPC_GOT_TLSGD16,
1699 R_PPC_GOT_TLSGD16_LO,
1700 R_PPC_GOT_TLSGD16_HI,
1701 R_PPC_GOT_TLSGD16_HA,
1702 R_PPC_GOT_TLSLD16,
1703 R_PPC_GOT_TLSLD16_LO,
1704 R_PPC_GOT_TLSLD16_HI,
1705 R_PPC_GOT_TLSLD16_HA,
1706 R_PPC_GOT_TPREL16,
1707 R_PPC_GOT_TPREL16_LO,
1708 R_PPC_GOT_TPREL16_HI,
1709 R_PPC_GOT_TPREL16_HA,
1710 R_PPC_GOT_DTPREL16,
1711 R_PPC_GOT_DTPREL16_LO,
1712 R_PPC_GOT_DTPREL16_HI,
1713 R_PPC_GOT_DTPREL16_HA,
1714 R_PPC_TLSGD,
1715 R_PPC_TLSLD,
1716 R_PPC_EMB_NADDR32,
1717 R_PPC_EMB_NADDR16,
1718 R_PPC_EMB_NADDR16_LO,
1719 R_PPC_EMB_NADDR16_HI,
1720 R_PPC_EMB_NADDR16_HA,
1721 R_PPC_EMB_SDAI16,
1722 R_PPC_EMB_SDA2I16,
1723 R_PPC_EMB_SDA2REL,
1724 R_PPC_EMB_SDA21,
1725 R_PPC_EMB_MRKREF,
1726 R_PPC_EMB_RELSEC16,
1727 R_PPC_EMB_RELST_LO,
1728 R_PPC_EMB_RELST_HI,
1729 R_PPC_EMB_RELST_HA,
1730 R_PPC_EMB_BIT_FLD,
1731 R_PPC_EMB_RELSDA,
1732 R_PPC_DIAB_SDA21_LO,
1733 R_PPC_DIAB_SDA21_HI,
1734 R_PPC_DIAB_SDA21_HA,
1735 R_PPC_DIAB_RELSDA_LO,
1736 R_PPC_DIAB_RELSDA_HI,
1737 R_PPC_DIAB_RELSDA_HA,
1738 R_PPC_IRELATIVE,
1739 R_PPC_REL16,
1740 R_PPC_REL16_LO,
1741 R_PPC_REL16_HI,
1742 R_PPC_REL16_HA,
1743 R_PPC_TOC16,
1744 );
1745 static FLAGS_R_PPC64: &[Flag<u32>] = &flags!(
1746 R_PPC64_NONE,
1747 R_PPC64_ADDR32,
1748 R_PPC64_ADDR24,
1749 R_PPC64_ADDR16,
1750 R_PPC64_ADDR16_LO,
1751 R_PPC64_ADDR16_HI,
1752 R_PPC64_ADDR16_HA,
1753 R_PPC64_ADDR14,
1754 R_PPC64_ADDR14_BRTAKEN,
1755 R_PPC64_ADDR14_BRNTAKEN,
1756 R_PPC64_REL24,
1757 R_PPC64_REL14,
1758 R_PPC64_REL14_BRTAKEN,
1759 R_PPC64_REL14_BRNTAKEN,
1760 R_PPC64_GOT16,
1761 R_PPC64_GOT16_LO,
1762 R_PPC64_GOT16_HI,
1763 R_PPC64_GOT16_HA,
1764 R_PPC64_COPY,
1765 R_PPC64_GLOB_DAT,
1766 R_PPC64_JMP_SLOT,
1767 R_PPC64_RELATIVE,
1768 R_PPC64_UADDR32,
1769 R_PPC64_UADDR16,
1770 R_PPC64_REL32,
1771 R_PPC64_PLT32,
1772 R_PPC64_PLTREL32,
1773 R_PPC64_PLT16_LO,
1774 R_PPC64_PLT16_HI,
1775 R_PPC64_PLT16_HA,
1776 R_PPC64_SECTOFF,
1777 R_PPC64_SECTOFF_LO,
1778 R_PPC64_SECTOFF_HI,
1779 R_PPC64_SECTOFF_HA,
1780 R_PPC64_ADDR30,
1781 R_PPC64_ADDR64,
1782 R_PPC64_ADDR16_HIGHER,
1783 R_PPC64_ADDR16_HIGHERA,
1784 R_PPC64_ADDR16_HIGHEST,
1785 R_PPC64_ADDR16_HIGHESTA,
1786 R_PPC64_UADDR64,
1787 R_PPC64_REL64,
1788 R_PPC64_PLT64,
1789 R_PPC64_PLTREL64,
1790 R_PPC64_TOC16,
1791 R_PPC64_TOC16_LO,
1792 R_PPC64_TOC16_HI,
1793 R_PPC64_TOC16_HA,
1794 R_PPC64_TOC,
1795 R_PPC64_PLTGOT16,
1796 R_PPC64_PLTGOT16_LO,
1797 R_PPC64_PLTGOT16_HI,
1798 R_PPC64_PLTGOT16_HA,
1799 R_PPC64_ADDR16_DS,
1800 R_PPC64_ADDR16_LO_DS,
1801 R_PPC64_GOT16_DS,
1802 R_PPC64_GOT16_LO_DS,
1803 R_PPC64_PLT16_LO_DS,
1804 R_PPC64_SECTOFF_DS,
1805 R_PPC64_SECTOFF_LO_DS,
1806 R_PPC64_TOC16_DS,
1807 R_PPC64_TOC16_LO_DS,
1808 R_PPC64_PLTGOT16_DS,
1809 R_PPC64_PLTGOT16_LO_DS,
1810 R_PPC64_TLS,
1811 R_PPC64_DTPMOD64,
1812 R_PPC64_TPREL16,
1813 R_PPC64_TPREL16_LO,
1814 R_PPC64_TPREL16_HI,
1815 R_PPC64_TPREL16_HA,
1816 R_PPC64_TPREL64,
1817 R_PPC64_DTPREL16,
1818 R_PPC64_DTPREL16_LO,
1819 R_PPC64_DTPREL16_HI,
1820 R_PPC64_DTPREL16_HA,
1821 R_PPC64_DTPREL64,
1822 R_PPC64_GOT_TLSGD16,
1823 R_PPC64_GOT_TLSGD16_LO,
1824 R_PPC64_GOT_TLSGD16_HI,
1825 R_PPC64_GOT_TLSGD16_HA,
1826 R_PPC64_GOT_TLSLD16,
1827 R_PPC64_GOT_TLSLD16_LO,
1828 R_PPC64_GOT_TLSLD16_HI,
1829 R_PPC64_GOT_TLSLD16_HA,
1830 R_PPC64_GOT_TPREL16_DS,
1831 R_PPC64_GOT_TPREL16_LO_DS,
1832 R_PPC64_GOT_TPREL16_HI,
1833 R_PPC64_GOT_TPREL16_HA,
1834 R_PPC64_GOT_DTPREL16_DS,
1835 R_PPC64_GOT_DTPREL16_LO_DS,
1836 R_PPC64_GOT_DTPREL16_HI,
1837 R_PPC64_GOT_DTPREL16_HA,
1838 R_PPC64_TPREL16_DS,
1839 R_PPC64_TPREL16_LO_DS,
1840 R_PPC64_TPREL16_HIGHER,
1841 R_PPC64_TPREL16_HIGHERA,
1842 R_PPC64_TPREL16_HIGHEST,
1843 R_PPC64_TPREL16_HIGHESTA,
1844 R_PPC64_DTPREL16_DS,
1845 R_PPC64_DTPREL16_LO_DS,
1846 R_PPC64_DTPREL16_HIGHER,
1847 R_PPC64_DTPREL16_HIGHERA,
1848 R_PPC64_DTPREL16_HIGHEST,
1849 R_PPC64_DTPREL16_HIGHESTA,
1850 R_PPC64_TLSGD,
1851 R_PPC64_TLSLD,
1852 R_PPC64_TOCSAVE,
1853 R_PPC64_ADDR16_HIGH,
1854 R_PPC64_ADDR16_HIGHA,
1855 R_PPC64_TPREL16_HIGH,
1856 R_PPC64_TPREL16_HIGHA,
1857 R_PPC64_DTPREL16_HIGH,
1858 R_PPC64_DTPREL16_HIGHA,
1859 R_PPC64_JMP_IREL,
1860 R_PPC64_IRELATIVE,
1861 R_PPC64_REL16,
1862 R_PPC64_REL16_LO,
1863 R_PPC64_REL16_HI,
1864 R_PPC64_REL16_HA,
1865 );
1866 static FLAGS_R_AARCH64: &[Flag<u32>] = &flags!(
1867 R_AARCH64_NONE,
1868 R_AARCH64_P32_ABS32,
1869 R_AARCH64_P32_COPY,
1870 R_AARCH64_P32_GLOB_DAT,
1871 R_AARCH64_P32_JUMP_SLOT,
1872 R_AARCH64_P32_RELATIVE,
1873 R_AARCH64_P32_TLS_DTPMOD,
1874 R_AARCH64_P32_TLS_DTPREL,
1875 R_AARCH64_P32_TLS_TPREL,
1876 R_AARCH64_P32_TLSDESC,
1877 R_AARCH64_P32_IRELATIVE,
1878 R_AARCH64_ABS64,
1879 R_AARCH64_ABS32,
1880 R_AARCH64_ABS16,
1881 R_AARCH64_PREL64,
1882 R_AARCH64_PREL32,
1883 R_AARCH64_PREL16,
1884 R_AARCH64_MOVW_UABS_G0,
1885 R_AARCH64_MOVW_UABS_G0_NC,
1886 R_AARCH64_MOVW_UABS_G1,
1887 R_AARCH64_MOVW_UABS_G1_NC,
1888 R_AARCH64_MOVW_UABS_G2,
1889 R_AARCH64_MOVW_UABS_G2_NC,
1890 R_AARCH64_MOVW_UABS_G3,
1891 R_AARCH64_MOVW_SABS_G0,
1892 R_AARCH64_MOVW_SABS_G1,
1893 R_AARCH64_MOVW_SABS_G2,
1894 R_AARCH64_LD_PREL_LO19,
1895 R_AARCH64_ADR_PREL_LO21,
1896 R_AARCH64_ADR_PREL_PG_HI21,
1897 R_AARCH64_ADR_PREL_PG_HI21_NC,
1898 R_AARCH64_ADD_ABS_LO12_NC,
1899 R_AARCH64_LDST8_ABS_LO12_NC,
1900 R_AARCH64_TSTBR14,
1901 R_AARCH64_CONDBR19,
1902 R_AARCH64_JUMP26,
1903 R_AARCH64_CALL26,
1904 R_AARCH64_LDST16_ABS_LO12_NC,
1905 R_AARCH64_LDST32_ABS_LO12_NC,
1906 R_AARCH64_LDST64_ABS_LO12_NC,
1907 R_AARCH64_MOVW_PREL_G0,
1908 R_AARCH64_MOVW_PREL_G0_NC,
1909 R_AARCH64_MOVW_PREL_G1,
1910 R_AARCH64_MOVW_PREL_G1_NC,
1911 R_AARCH64_MOVW_PREL_G2,
1912 R_AARCH64_MOVW_PREL_G2_NC,
1913 R_AARCH64_MOVW_PREL_G3,
1914 R_AARCH64_LDST128_ABS_LO12_NC,
1915 R_AARCH64_MOVW_GOTOFF_G0,
1916 R_AARCH64_MOVW_GOTOFF_G0_NC,
1917 R_AARCH64_MOVW_GOTOFF_G1,
1918 R_AARCH64_MOVW_GOTOFF_G1_NC,
1919 R_AARCH64_MOVW_GOTOFF_G2,
1920 R_AARCH64_MOVW_GOTOFF_G2_NC,
1921 R_AARCH64_MOVW_GOTOFF_G3,
1922 R_AARCH64_GOTREL64,
1923 R_AARCH64_GOTREL32,
1924 R_AARCH64_GOT_LD_PREL19,
1925 R_AARCH64_LD64_GOTOFF_LO15,
1926 R_AARCH64_ADR_GOT_PAGE,
1927 R_AARCH64_LD64_GOT_LO12_NC,
1928 R_AARCH64_LD64_GOTPAGE_LO15,
1929 R_AARCH64_TLSGD_ADR_PREL21,
1930 R_AARCH64_TLSGD_ADR_PAGE21,
1931 R_AARCH64_TLSGD_ADD_LO12_NC,
1932 R_AARCH64_TLSGD_MOVW_G1,
1933 R_AARCH64_TLSGD_MOVW_G0_NC,
1934 R_AARCH64_TLSLD_ADR_PREL21,
1935 R_AARCH64_TLSLD_ADR_PAGE21,
1936 R_AARCH64_TLSLD_ADD_LO12_NC,
1937 R_AARCH64_TLSLD_MOVW_G1,
1938 R_AARCH64_TLSLD_MOVW_G0_NC,
1939 R_AARCH64_TLSLD_LD_PREL19,
1940 R_AARCH64_TLSLD_MOVW_DTPREL_G2,
1941 R_AARCH64_TLSLD_MOVW_DTPREL_G1,
1942 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC,
1943 R_AARCH64_TLSLD_MOVW_DTPREL_G0,
1944 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC,
1945 R_AARCH64_TLSLD_ADD_DTPREL_HI12,
1946 R_AARCH64_TLSLD_ADD_DTPREL_LO12,
1947 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC,
1948 R_AARCH64_TLSLD_LDST8_DTPREL_LO12,
1949 R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC,
1950 R_AARCH64_TLSLD_LDST16_DTPREL_LO12,
1951 R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC,
1952 R_AARCH64_TLSLD_LDST32_DTPREL_LO12,
1953 R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC,
1954 R_AARCH64_TLSLD_LDST64_DTPREL_LO12,
1955 R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC,
1956 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1,
1957 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC,
1958 R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21,
1959 R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC,
1960 R_AARCH64_TLSIE_LD_GOTTPREL_PREL19,
1961 R_AARCH64_TLSLE_MOVW_TPREL_G2,
1962 R_AARCH64_TLSLE_MOVW_TPREL_G1,
1963 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC,
1964 R_AARCH64_TLSLE_MOVW_TPREL_G0,
1965 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC,
1966 R_AARCH64_TLSLE_ADD_TPREL_HI12,
1967 R_AARCH64_TLSLE_ADD_TPREL_LO12,
1968 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC,
1969 R_AARCH64_TLSLE_LDST8_TPREL_LO12,
1970 R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC,
1971 R_AARCH64_TLSLE_LDST16_TPREL_LO12,
1972 R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC,
1973 R_AARCH64_TLSLE_LDST32_TPREL_LO12,
1974 R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC,
1975 R_AARCH64_TLSLE_LDST64_TPREL_LO12,
1976 R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC,
1977 R_AARCH64_TLSDESC_LD_PREL19,
1978 R_AARCH64_TLSDESC_ADR_PREL21,
1979 R_AARCH64_TLSDESC_ADR_PAGE21,
1980 R_AARCH64_TLSDESC_LD64_LO12,
1981 R_AARCH64_TLSDESC_ADD_LO12,
1982 R_AARCH64_TLSDESC_OFF_G1,
1983 R_AARCH64_TLSDESC_OFF_G0_NC,
1984 R_AARCH64_TLSDESC_LDR,
1985 R_AARCH64_TLSDESC_ADD,
1986 R_AARCH64_TLSDESC_CALL,
1987 R_AARCH64_TLSLE_LDST128_TPREL_LO12,
1988 R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC,
1989 R_AARCH64_TLSLD_LDST128_DTPREL_LO12,
1990 R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC,
1991 R_AARCH64_COPY,
1992 R_AARCH64_GLOB_DAT,
1993 R_AARCH64_JUMP_SLOT,
1994 R_AARCH64_RELATIVE,
1995 R_AARCH64_TLS_DTPMOD,
1996 R_AARCH64_TLS_DTPREL,
1997 R_AARCH64_TLS_TPREL,
1998 R_AARCH64_TLSDESC,
1999 R_AARCH64_IRELATIVE,
2000 );
2001 static FLAGS_R_ARM: &[Flag<u32>] = &flags!(
2002 R_ARM_NONE,
2003 R_ARM_PC24,
2004 R_ARM_ABS32,
2005 R_ARM_REL32,
2006 R_ARM_PC13,
2007 R_ARM_ABS16,
2008 R_ARM_ABS12,
2009 R_ARM_THM_ABS5,
2010 R_ARM_ABS8,
2011 R_ARM_SBREL32,
2012 R_ARM_THM_PC22,
2013 R_ARM_THM_PC8,
2014 R_ARM_AMP_VCALL9,
2015 R_ARM_SWI24,
2016 R_ARM_TLS_DESC,
2017 R_ARM_THM_SWI8,
2018 R_ARM_XPC25,
2019 R_ARM_THM_XPC22,
2020 R_ARM_TLS_DTPMOD32,
2021 R_ARM_TLS_DTPOFF32,
2022 R_ARM_TLS_TPOFF32,
2023 R_ARM_COPY,
2024 R_ARM_GLOB_DAT,
2025 R_ARM_JUMP_SLOT,
2026 R_ARM_RELATIVE,
2027 R_ARM_GOTOFF,
2028 R_ARM_GOTPC,
2029 R_ARM_GOT32,
2030 R_ARM_PLT32,
2031 R_ARM_CALL,
2032 R_ARM_JUMP24,
2033 R_ARM_THM_JUMP24,
2034 R_ARM_BASE_ABS,
2035 R_ARM_ALU_PCREL_7_0,
2036 R_ARM_ALU_PCREL_15_8,
2037 R_ARM_ALU_PCREL_23_15,
2038 R_ARM_LDR_SBREL_11_0,
2039 R_ARM_ALU_SBREL_19_12,
2040 R_ARM_ALU_SBREL_27_20,
2041 R_ARM_TARGET1,
2042 R_ARM_SBREL31,
2043 R_ARM_V4BX,
2044 R_ARM_TARGET2,
2045 R_ARM_PREL31,
2046 R_ARM_MOVW_ABS_NC,
2047 R_ARM_MOVT_ABS,
2048 R_ARM_MOVW_PREL_NC,
2049 R_ARM_MOVT_PREL,
2050 R_ARM_THM_MOVW_ABS_NC,
2051 R_ARM_THM_MOVT_ABS,
2052 R_ARM_THM_MOVW_PREL_NC,
2053 R_ARM_THM_MOVT_PREL,
2054 R_ARM_THM_JUMP19,
2055 R_ARM_THM_JUMP6,
2056 R_ARM_THM_ALU_PREL_11_0,
2057 R_ARM_THM_PC12,
2058 R_ARM_ABS32_NOI,
2059 R_ARM_REL32_NOI,
2060 R_ARM_ALU_PC_G0_NC,
2061 R_ARM_ALU_PC_G0,
2062 R_ARM_ALU_PC_G1_NC,
2063 R_ARM_ALU_PC_G1,
2064 R_ARM_ALU_PC_G2,
2065 R_ARM_LDR_PC_G1,
2066 R_ARM_LDR_PC_G2,
2067 R_ARM_LDRS_PC_G0,
2068 R_ARM_LDRS_PC_G1,
2069 R_ARM_LDRS_PC_G2,
2070 R_ARM_LDC_PC_G0,
2071 R_ARM_LDC_PC_G1,
2072 R_ARM_LDC_PC_G2,
2073 R_ARM_ALU_SB_G0_NC,
2074 R_ARM_ALU_SB_G0,
2075 R_ARM_ALU_SB_G1_NC,
2076 R_ARM_ALU_SB_G1,
2077 R_ARM_ALU_SB_G2,
2078 R_ARM_LDR_SB_G0,
2079 R_ARM_LDR_SB_G1,
2080 R_ARM_LDR_SB_G2,
2081 R_ARM_LDRS_SB_G0,
2082 R_ARM_LDRS_SB_G1,
2083 R_ARM_LDRS_SB_G2,
2084 R_ARM_LDC_SB_G0,
2085 R_ARM_LDC_SB_G1,
2086 R_ARM_LDC_SB_G2,
2087 R_ARM_MOVW_BREL_NC,
2088 R_ARM_MOVT_BREL,
2089 R_ARM_MOVW_BREL,
2090 R_ARM_THM_MOVW_BREL_NC,
2091 R_ARM_THM_MOVT_BREL,
2092 R_ARM_THM_MOVW_BREL,
2093 R_ARM_TLS_GOTDESC,
2094 R_ARM_TLS_CALL,
2095 R_ARM_TLS_DESCSEQ,
2096 R_ARM_THM_TLS_CALL,
2097 R_ARM_PLT32_ABS,
2098 R_ARM_GOT_ABS,
2099 R_ARM_GOT_PREL,
2100 R_ARM_GOT_BREL12,
2101 R_ARM_GOTOFF12,
2102 R_ARM_GOTRELAX,
2103 R_ARM_GNU_VTENTRY,
2104 R_ARM_GNU_VTINHERIT,
2105 R_ARM_THM_PC11,
2106 R_ARM_THM_PC9,
2107 R_ARM_TLS_GD32,
2108 R_ARM_TLS_LDM32,
2109 R_ARM_TLS_LDO32,
2110 R_ARM_TLS_IE32,
2111 R_ARM_TLS_LE32,
2112 R_ARM_TLS_LDO12,
2113 R_ARM_TLS_LE12,
2114 R_ARM_TLS_IE12GP,
2115 R_ARM_ME_TOO,
2116 R_ARM_THM_TLS_DESCSEQ,
2117 R_ARM_THM_TLS_DESCSEQ16,
2118 R_ARM_THM_TLS_DESCSEQ32,
2119 R_ARM_THM_GOT_BREL12,
2120 R_ARM_IRELATIVE,
2121 R_ARM_RXPC25,
2122 R_ARM_RSBREL32,
2123 R_ARM_THM_RPC22,
2124 R_ARM_RREL32,
2125 R_ARM_RABS22,
2126 R_ARM_RPC24,
2127 R_ARM_RBASE,
2128 );
2129 static FLAGS_R_CKCORE: &[Flag<u32>] = &flags!(
2130 R_CKCORE_NONE,
2131 R_CKCORE_ADDR32,
2132 R_CKCORE_PCRELIMM8BY4,
2133 R_CKCORE_PCRELIMM11BY2,
2134 R_CKCORE_PCREL32,
2135 R_CKCORE_PCRELJSR_IMM11BY2,
2136 R_CKCORE_RELATIVE,
2137 R_CKCORE_COPY,
2138 R_CKCORE_GLOB_DAT,
2139 R_CKCORE_JUMP_SLOT,
2140 R_CKCORE_GOTOFF,
2141 R_CKCORE_GOTPC,
2142 R_CKCORE_GOT32,
2143 R_CKCORE_PLT32,
2144 R_CKCORE_ADDRGOT,
2145 R_CKCORE_ADDRPLT,
2146 R_CKCORE_PCREL_IMM26BY2,
2147 R_CKCORE_PCREL_IMM16BY2,
2148 R_CKCORE_PCREL_IMM16BY4,
2149 R_CKCORE_PCREL_IMM10BY2,
2150 R_CKCORE_PCREL_IMM10BY4,
2151 R_CKCORE_ADDR_HI16,
2152 R_CKCORE_ADDR_LO16,
2153 R_CKCORE_GOTPC_HI16,
2154 R_CKCORE_GOTPC_LO16,
2155 R_CKCORE_GOTOFF_HI16,
2156 R_CKCORE_GOTOFF_LO16,
2157 R_CKCORE_GOT12,
2158 R_CKCORE_GOT_HI16,
2159 R_CKCORE_GOT_LO16,
2160 R_CKCORE_PLT12,
2161 R_CKCORE_PLT_HI16,
2162 R_CKCORE_PLT_LO16,
2163 R_CKCORE_ADDRGOT_HI16,
2164 R_CKCORE_ADDRGOT_LO16,
2165 R_CKCORE_ADDRPLT_HI16,
2166 R_CKCORE_ADDRPLT_LO16,
2167 R_CKCORE_PCREL_JSR_IMM26BY2,
2168 R_CKCORE_TOFFSET_LO16,
2169 R_CKCORE_DOFFSET_LO16,
2170 R_CKCORE_PCREL_IMM18BY2,
2171 R_CKCORE_DOFFSET_IMM18,
2172 R_CKCORE_DOFFSET_IMM18BY2,
2173 R_CKCORE_DOFFSET_IMM18BY4,
2174 R_CKCORE_GOT_IMM18BY4,
2175 R_CKCORE_PLT_IMM18BY4,
2176 R_CKCORE_PCREL_IMM7BY4,
2177 R_CKCORE_TLS_LE32,
2178 R_CKCORE_TLS_IE32,
2179 R_CKCORE_TLS_GD32,
2180 R_CKCORE_TLS_LDM32,
2181 R_CKCORE_TLS_LDO32,
2182 R_CKCORE_TLS_DTPMOD32,
2183 R_CKCORE_TLS_DTPOFF32,
2184 R_CKCORE_TLS_TPOFF32,
2185 );
2186 static FLAGS_R_IA64: &[Flag<u32>] = &flags!(
2187 R_IA64_NONE,
2188 R_IA64_IMM14,
2189 R_IA64_IMM22,
2190 R_IA64_IMM64,
2191 R_IA64_DIR32MSB,
2192 R_IA64_DIR32LSB,
2193 R_IA64_DIR64MSB,
2194 R_IA64_DIR64LSB,
2195 R_IA64_GPREL22,
2196 R_IA64_GPREL64I,
2197 R_IA64_GPREL32MSB,
2198 R_IA64_GPREL32LSB,
2199 R_IA64_GPREL64MSB,
2200 R_IA64_GPREL64LSB,
2201 R_IA64_LTOFF22,
2202 R_IA64_LTOFF64I,
2203 R_IA64_PLTOFF22,
2204 R_IA64_PLTOFF64I,
2205 R_IA64_PLTOFF64MSB,
2206 R_IA64_PLTOFF64LSB,
2207 R_IA64_FPTR64I,
2208 R_IA64_FPTR32MSB,
2209 R_IA64_FPTR32LSB,
2210 R_IA64_FPTR64MSB,
2211 R_IA64_FPTR64LSB,
2212 R_IA64_PCREL60B,
2213 R_IA64_PCREL21B,
2214 R_IA64_PCREL21M,
2215 R_IA64_PCREL21F,
2216 R_IA64_PCREL32MSB,
2217 R_IA64_PCREL32LSB,
2218 R_IA64_PCREL64MSB,
2219 R_IA64_PCREL64LSB,
2220 R_IA64_LTOFF_FPTR22,
2221 R_IA64_LTOFF_FPTR64I,
2222 R_IA64_LTOFF_FPTR32MSB,
2223 R_IA64_LTOFF_FPTR32LSB,
2224 R_IA64_LTOFF_FPTR64MSB,
2225 R_IA64_LTOFF_FPTR64LSB,
2226 R_IA64_SEGREL32MSB,
2227 R_IA64_SEGREL32LSB,
2228 R_IA64_SEGREL64MSB,
2229 R_IA64_SEGREL64LSB,
2230 R_IA64_SECREL32MSB,
2231 R_IA64_SECREL32LSB,
2232 R_IA64_SECREL64MSB,
2233 R_IA64_SECREL64LSB,
2234 R_IA64_REL32MSB,
2235 R_IA64_REL32LSB,
2236 R_IA64_REL64MSB,
2237 R_IA64_REL64LSB,
2238 R_IA64_LTV32MSB,
2239 R_IA64_LTV32LSB,
2240 R_IA64_LTV64MSB,
2241 R_IA64_LTV64LSB,
2242 R_IA64_PCREL21BI,
2243 R_IA64_PCREL22,
2244 R_IA64_PCREL64I,
2245 R_IA64_IPLTMSB,
2246 R_IA64_IPLTLSB,
2247 R_IA64_COPY,
2248 R_IA64_SUB,
2249 R_IA64_LTOFF22X,
2250 R_IA64_LDXMOV,
2251 R_IA64_TPREL14,
2252 R_IA64_TPREL22,
2253 R_IA64_TPREL64I,
2254 R_IA64_TPREL64MSB,
2255 R_IA64_TPREL64LSB,
2256 R_IA64_LTOFF_TPREL22,
2257 R_IA64_DTPMOD64MSB,
2258 R_IA64_DTPMOD64LSB,
2259 R_IA64_LTOFF_DTPMOD22,
2260 R_IA64_DTPREL14,
2261 R_IA64_DTPREL22,
2262 R_IA64_DTPREL64I,
2263 R_IA64_DTPREL32MSB,
2264 R_IA64_DTPREL32LSB,
2265 R_IA64_DTPREL64MSB,
2266 R_IA64_DTPREL64LSB,
2267 R_IA64_LTOFF_DTPREL22,
2268 );
2269 static FLAGS_R_SH: &[Flag<u32>] = &flags!(
2270 R_SH_NONE,
2271 R_SH_DIR32,
2272 R_SH_REL32,
2273 R_SH_DIR8WPN,
2274 R_SH_IND12W,
2275 R_SH_DIR8WPL,
2276 R_SH_DIR8WPZ,
2277 R_SH_DIR8BP,
2278 R_SH_DIR8W,
2279 R_SH_DIR8L,
2280 R_SH_SWITCH16,
2281 R_SH_SWITCH32,
2282 R_SH_USES,
2283 R_SH_COUNT,
2284 R_SH_ALIGN,
2285 R_SH_CODE,
2286 R_SH_DATA,
2287 R_SH_LABEL,
2288 R_SH_SWITCH8,
2289 R_SH_GNU_VTINHERIT,
2290 R_SH_GNU_VTENTRY,
2291 R_SH_TLS_GD_32,
2292 R_SH_TLS_LD_32,
2293 R_SH_TLS_LDO_32,
2294 R_SH_TLS_IE_32,
2295 R_SH_TLS_LE_32,
2296 R_SH_TLS_DTPMOD32,
2297 R_SH_TLS_DTPOFF32,
2298 R_SH_TLS_TPOFF32,
2299 R_SH_GOT32,
2300 R_SH_PLT32,
2301 R_SH_COPY,
2302 R_SH_GLOB_DAT,
2303 R_SH_JMP_SLOT,
2304 R_SH_RELATIVE,
2305 R_SH_GOTOFF,
2306 R_SH_GOTPC,
2307 );
2308 static FLAGS_R_390: &[Flag<u32>] = &flags!(
2309 R_390_NONE,
2310 R_390_8,
2311 R_390_12,
2312 R_390_16,
2313 R_390_32,
2314 R_390_PC32,
2315 R_390_GOT12,
2316 R_390_GOT32,
2317 R_390_PLT32,
2318 R_390_COPY,
2319 R_390_GLOB_DAT,
2320 R_390_JMP_SLOT,
2321 R_390_RELATIVE,
2322 R_390_GOTOFF32,
2323 R_390_GOTPC,
2324 R_390_GOT16,
2325 R_390_PC16,
2326 R_390_PC16DBL,
2327 R_390_PLT16DBL,
2328 R_390_PC32DBL,
2329 R_390_PLT32DBL,
2330 R_390_GOTPCDBL,
2331 R_390_64,
2332 R_390_PC64,
2333 R_390_GOT64,
2334 R_390_PLT64,
2335 R_390_GOTENT,
2336 R_390_GOTOFF16,
2337 R_390_GOTOFF64,
2338 R_390_GOTPLT12,
2339 R_390_GOTPLT16,
2340 R_390_GOTPLT32,
2341 R_390_GOTPLT64,
2342 R_390_GOTPLTENT,
2343 R_390_PLTOFF16,
2344 R_390_PLTOFF32,
2345 R_390_PLTOFF64,
2346 R_390_TLS_LOAD,
2347 R_390_TLS_GDCALL,
2348 R_390_TLS_LDCALL,
2349 R_390_TLS_GD32,
2350 R_390_TLS_GD64,
2351 R_390_TLS_GOTIE12,
2352 R_390_TLS_GOTIE32,
2353 R_390_TLS_GOTIE64,
2354 R_390_TLS_LDM32,
2355 R_390_TLS_LDM64,
2356 R_390_TLS_IE32,
2357 R_390_TLS_IE64,
2358 R_390_TLS_IEENT,
2359 R_390_TLS_LE32,
2360 R_390_TLS_LE64,
2361 R_390_TLS_LDO32,
2362 R_390_TLS_LDO64,
2363 R_390_TLS_DTPMOD,
2364 R_390_TLS_DTPOFF,
2365 R_390_TLS_TPOFF,
2366 R_390_20,
2367 R_390_GOT20,
2368 R_390_GOTPLT20,
2369 R_390_TLS_GOTIE20,
2370 R_390_IRELATIVE,
2371 );
2372 static FLAGS_R_CRIS: &[Flag<u32>] = &flags!(
2373 R_CRIS_NONE,
2374 R_CRIS_8,
2375 R_CRIS_16,
2376 R_CRIS_32,
2377 R_CRIS_8_PCREL,
2378 R_CRIS_16_PCREL,
2379 R_CRIS_32_PCREL,
2380 R_CRIS_GNU_VTINHERIT,
2381 R_CRIS_GNU_VTENTRY,
2382 R_CRIS_COPY,
2383 R_CRIS_GLOB_DAT,
2384 R_CRIS_JUMP_SLOT,
2385 R_CRIS_RELATIVE,
2386 R_CRIS_16_GOT,
2387 R_CRIS_32_GOT,
2388 R_CRIS_16_GOTPLT,
2389 R_CRIS_32_GOTPLT,
2390 R_CRIS_32_GOTREL,
2391 R_CRIS_32_PLT_GOTREL,
2392 R_CRIS_32_PLT_PCREL,
2393 );
2394 static FLAGS_R_X86_64: &[Flag<u32>] = &flags!(
2395 R_X86_64_NONE,
2396 R_X86_64_64,
2397 R_X86_64_PC32,
2398 R_X86_64_GOT32,
2399 R_X86_64_PLT32,
2400 R_X86_64_COPY,
2401 R_X86_64_GLOB_DAT,
2402 R_X86_64_JUMP_SLOT,
2403 R_X86_64_RELATIVE,
2404 R_X86_64_GOTPCREL,
2405 R_X86_64_32,
2406 R_X86_64_32S,
2407 R_X86_64_16,
2408 R_X86_64_PC16,
2409 R_X86_64_8,
2410 R_X86_64_PC8,
2411 R_X86_64_DTPMOD64,
2412 R_X86_64_DTPOFF64,
2413 R_X86_64_TPOFF64,
2414 R_X86_64_TLSGD,
2415 R_X86_64_TLSLD,
2416 R_X86_64_DTPOFF32,
2417 R_X86_64_GOTTPOFF,
2418 R_X86_64_TPOFF32,
2419 R_X86_64_PC64,
2420 R_X86_64_GOTOFF64,
2421 R_X86_64_GOTPC32,
2422 R_X86_64_GOT64,
2423 R_X86_64_GOTPCREL64,
2424 R_X86_64_GOTPC64,
2425 R_X86_64_GOTPLT64,
2426 R_X86_64_PLTOFF64,
2427 R_X86_64_SIZE32,
2428 R_X86_64_SIZE64,
2429 R_X86_64_GOTPC32_TLSDESC,
2430 R_X86_64_TLSDESC_CALL,
2431 R_X86_64_TLSDESC,
2432 R_X86_64_IRELATIVE,
2433 R_X86_64_RELATIVE64,
2434 R_X86_64_GOTPCRELX,
2435 R_X86_64_REX_GOTPCRELX,
2436 );
2437 static FLAGS_R_MN10300: &[Flag<u32>] = &flags!(
2438 R_MN10300_NONE,
2439 R_MN10300_32,
2440 R_MN10300_16,
2441 R_MN10300_8,
2442 R_MN10300_PCREL32,
2443 R_MN10300_PCREL16,
2444 R_MN10300_PCREL8,
2445 R_MN10300_GNU_VTINHERIT,
2446 R_MN10300_GNU_VTENTRY,
2447 R_MN10300_24,
2448 R_MN10300_GOTPC32,
2449 R_MN10300_GOTPC16,
2450 R_MN10300_GOTOFF32,
2451 R_MN10300_GOTOFF24,
2452 R_MN10300_GOTOFF16,
2453 R_MN10300_PLT32,
2454 R_MN10300_PLT16,
2455 R_MN10300_GOT32,
2456 R_MN10300_GOT24,
2457 R_MN10300_GOT16,
2458 R_MN10300_COPY,
2459 R_MN10300_GLOB_DAT,
2460 R_MN10300_JMP_SLOT,
2461 R_MN10300_RELATIVE,
2462 R_MN10300_TLS_GD,
2463 R_MN10300_TLS_LD,
2464 R_MN10300_TLS_LDO,
2465 R_MN10300_TLS_GOTIE,
2466 R_MN10300_TLS_IE,
2467 R_MN10300_TLS_LE,
2468 R_MN10300_TLS_DTPMOD,
2469 R_MN10300_TLS_DTPOFF,
2470 R_MN10300_TLS_TPOFF,
2471 R_MN10300_SYM_DIFF,
2472 R_MN10300_ALIGN,
2473 );
2474 static FLAGS_R_M32R: &[Flag<u32>] = &flags!(
2475 R_M32R_NONE,
2476 R_M32R_16,
2477 R_M32R_32,
2478 R_M32R_24,
2479 R_M32R_10_PCREL,
2480 R_M32R_18_PCREL,
2481 R_M32R_26_PCREL,
2482 R_M32R_HI16_ULO,
2483 R_M32R_HI16_SLO,
2484 R_M32R_LO16,
2485 R_M32R_SDA16,
2486 R_M32R_GNU_VTINHERIT,
2487 R_M32R_GNU_VTENTRY,
2488 R_M32R_16_RELA,
2489 R_M32R_32_RELA,
2490 R_M32R_24_RELA,
2491 R_M32R_10_PCREL_RELA,
2492 R_M32R_18_PCREL_RELA,
2493 R_M32R_26_PCREL_RELA,
2494 R_M32R_HI16_ULO_RELA,
2495 R_M32R_HI16_SLO_RELA,
2496 R_M32R_LO16_RELA,
2497 R_M32R_SDA16_RELA,
2498 R_M32R_RELA_GNU_VTINHERIT,
2499 R_M32R_RELA_GNU_VTENTRY,
2500 R_M32R_REL32,
2501 R_M32R_GOT24,
2502 R_M32R_26_PLTREL,
2503 R_M32R_COPY,
2504 R_M32R_GLOB_DAT,
2505 R_M32R_JMP_SLOT,
2506 R_M32R_RELATIVE,
2507 R_M32R_GOTOFF,
2508 R_M32R_GOTPC24,
2509 R_M32R_GOT16_HI_ULO,
2510 R_M32R_GOT16_HI_SLO,
2511 R_M32R_GOT16_LO,
2512 R_M32R_GOTPC_HI_ULO,
2513 R_M32R_GOTPC_HI_SLO,
2514 R_M32R_GOTPC_LO,
2515 R_M32R_GOTOFF_HI_ULO,
2516 R_M32R_GOTOFF_HI_SLO,
2517 R_M32R_GOTOFF_LO,
2518 R_M32R_NUM,
2519 );
2520 static FLAGS_R_MICROBLAZE: &[Flag<u32>] = &flags!(
2521 R_MICROBLAZE_NONE,
2522 R_MICROBLAZE_32,
2523 R_MICROBLAZE_32_PCREL,
2524 R_MICROBLAZE_64_PCREL,
2525 R_MICROBLAZE_32_PCREL_LO,
2526 R_MICROBLAZE_64,
2527 R_MICROBLAZE_32_LO,
2528 R_MICROBLAZE_SRO32,
2529 R_MICROBLAZE_SRW32,
2530 R_MICROBLAZE_64_NONE,
2531 R_MICROBLAZE_32_SYM_OP_SYM,
2532 R_MICROBLAZE_GNU_VTINHERIT,
2533 R_MICROBLAZE_GNU_VTENTRY,
2534 R_MICROBLAZE_GOTPC_64,
2535 R_MICROBLAZE_GOT_64,
2536 R_MICROBLAZE_PLT_64,
2537 R_MICROBLAZE_REL,
2538 R_MICROBLAZE_JUMP_SLOT,
2539 R_MICROBLAZE_GLOB_DAT,
2540 R_MICROBLAZE_GOTOFF_64,
2541 R_MICROBLAZE_GOTOFF_32,
2542 R_MICROBLAZE_COPY,
2543 R_MICROBLAZE_TLS,
2544 R_MICROBLAZE_TLSGD,
2545 R_MICROBLAZE_TLSLD,
2546 R_MICROBLAZE_TLSDTPMOD32,
2547 R_MICROBLAZE_TLSDTPREL32,
2548 R_MICROBLAZE_TLSDTPREL64,
2549 R_MICROBLAZE_TLSGOTTPREL32,
2550 R_MICROBLAZE_TLSTPREL32,
2551 );
2552 static FLAGS_R_NIOS2: &[Flag<u32>] = &flags!(
2553 R_NIOS2_NONE,
2554 R_NIOS2_S16,
2555 R_NIOS2_U16,
2556 R_NIOS2_PCREL16,
2557 R_NIOS2_CALL26,
2558 R_NIOS2_IMM5,
2559 R_NIOS2_CACHE_OPX,
2560 R_NIOS2_IMM6,
2561 R_NIOS2_IMM8,
2562 R_NIOS2_HI16,
2563 R_NIOS2_LO16,
2564 R_NIOS2_HIADJ16,
2565 R_NIOS2_BFD_RELOC_32,
2566 R_NIOS2_BFD_RELOC_16,
2567 R_NIOS2_BFD_RELOC_8,
2568 R_NIOS2_GPREL,
2569 R_NIOS2_GNU_VTINHERIT,
2570 R_NIOS2_GNU_VTENTRY,
2571 R_NIOS2_UJMP,
2572 R_NIOS2_CJMP,
2573 R_NIOS2_CALLR,
2574 R_NIOS2_ALIGN,
2575 R_NIOS2_GOT16,
2576 R_NIOS2_CALL16,
2577 R_NIOS2_GOTOFF_LO,
2578 R_NIOS2_GOTOFF_HA,
2579 R_NIOS2_PCREL_LO,
2580 R_NIOS2_PCREL_HA,
2581 R_NIOS2_TLS_GD16,
2582 R_NIOS2_TLS_LDM16,
2583 R_NIOS2_TLS_LDO16,
2584 R_NIOS2_TLS_IE16,
2585 R_NIOS2_TLS_LE16,
2586 R_NIOS2_TLS_DTPMOD,
2587 R_NIOS2_TLS_DTPREL,
2588 R_NIOS2_TLS_TPREL,
2589 R_NIOS2_COPY,
2590 R_NIOS2_GLOB_DAT,
2591 R_NIOS2_JUMP_SLOT,
2592 R_NIOS2_RELATIVE,
2593 R_NIOS2_GOTOFF,
2594 R_NIOS2_CALL26_NOAT,
2595 R_NIOS2_GOT_LO,
2596 R_NIOS2_GOT_HA,
2597 R_NIOS2_CALL_LO,
2598 R_NIOS2_CALL_HA,
2599 );
2600 static FLAGS_R_TILEPRO: &[Flag<u32>] = &flags!(
2601 R_TILEPRO_NONE,
2602 R_TILEPRO_32,
2603 R_TILEPRO_16,
2604 R_TILEPRO_8,
2605 R_TILEPRO_32_PCREL,
2606 R_TILEPRO_16_PCREL,
2607 R_TILEPRO_8_PCREL,
2608 R_TILEPRO_LO16,
2609 R_TILEPRO_HI16,
2610 R_TILEPRO_HA16,
2611 R_TILEPRO_COPY,
2612 R_TILEPRO_GLOB_DAT,
2613 R_TILEPRO_JMP_SLOT,
2614 R_TILEPRO_RELATIVE,
2615 R_TILEPRO_BROFF_X1,
2616 R_TILEPRO_JOFFLONG_X1,
2617 R_TILEPRO_JOFFLONG_X1_PLT,
2618 R_TILEPRO_IMM8_X0,
2619 R_TILEPRO_IMM8_Y0,
2620 R_TILEPRO_IMM8_X1,
2621 R_TILEPRO_IMM8_Y1,
2622 R_TILEPRO_MT_IMM15_X1,
2623 R_TILEPRO_MF_IMM15_X1,
2624 R_TILEPRO_IMM16_X0,
2625 R_TILEPRO_IMM16_X1,
2626 R_TILEPRO_IMM16_X0_LO,
2627 R_TILEPRO_IMM16_X1_LO,
2628 R_TILEPRO_IMM16_X0_HI,
2629 R_TILEPRO_IMM16_X1_HI,
2630 R_TILEPRO_IMM16_X0_HA,
2631 R_TILEPRO_IMM16_X1_HA,
2632 R_TILEPRO_IMM16_X0_PCREL,
2633 R_TILEPRO_IMM16_X1_PCREL,
2634 R_TILEPRO_IMM16_X0_LO_PCREL,
2635 R_TILEPRO_IMM16_X1_LO_PCREL,
2636 R_TILEPRO_IMM16_X0_HI_PCREL,
2637 R_TILEPRO_IMM16_X1_HI_PCREL,
2638 R_TILEPRO_IMM16_X0_HA_PCREL,
2639 R_TILEPRO_IMM16_X1_HA_PCREL,
2640 R_TILEPRO_IMM16_X0_GOT,
2641 R_TILEPRO_IMM16_X1_GOT,
2642 R_TILEPRO_IMM16_X0_GOT_LO,
2643 R_TILEPRO_IMM16_X1_GOT_LO,
2644 R_TILEPRO_IMM16_X0_GOT_HI,
2645 R_TILEPRO_IMM16_X1_GOT_HI,
2646 R_TILEPRO_IMM16_X0_GOT_HA,
2647 R_TILEPRO_IMM16_X1_GOT_HA,
2648 R_TILEPRO_MMSTART_X0,
2649 R_TILEPRO_MMEND_X0,
2650 R_TILEPRO_MMSTART_X1,
2651 R_TILEPRO_MMEND_X1,
2652 R_TILEPRO_SHAMT_X0,
2653 R_TILEPRO_SHAMT_X1,
2654 R_TILEPRO_SHAMT_Y0,
2655 R_TILEPRO_SHAMT_Y1,
2656 R_TILEPRO_DEST_IMM8_X1,
2657 R_TILEPRO_TLS_GD_CALL,
2658 R_TILEPRO_IMM8_X0_TLS_GD_ADD,
2659 R_TILEPRO_IMM8_X1_TLS_GD_ADD,
2660 R_TILEPRO_IMM8_Y0_TLS_GD_ADD,
2661 R_TILEPRO_IMM8_Y1_TLS_GD_ADD,
2662 R_TILEPRO_TLS_IE_LOAD,
2663 R_TILEPRO_IMM16_X0_TLS_GD,
2664 R_TILEPRO_IMM16_X1_TLS_GD,
2665 R_TILEPRO_IMM16_X0_TLS_GD_LO,
2666 R_TILEPRO_IMM16_X1_TLS_GD_LO,
2667 R_TILEPRO_IMM16_X0_TLS_GD_HI,
2668 R_TILEPRO_IMM16_X1_TLS_GD_HI,
2669 R_TILEPRO_IMM16_X0_TLS_GD_HA,
2670 R_TILEPRO_IMM16_X1_TLS_GD_HA,
2671 R_TILEPRO_IMM16_X0_TLS_IE,
2672 R_TILEPRO_IMM16_X1_TLS_IE,
2673 R_TILEPRO_IMM16_X0_TLS_IE_LO,
2674 R_TILEPRO_IMM16_X1_TLS_IE_LO,
2675 R_TILEPRO_IMM16_X0_TLS_IE_HI,
2676 R_TILEPRO_IMM16_X1_TLS_IE_HI,
2677 R_TILEPRO_IMM16_X0_TLS_IE_HA,
2678 R_TILEPRO_IMM16_X1_TLS_IE_HA,
2679 R_TILEPRO_TLS_DTPMOD32,
2680 R_TILEPRO_TLS_DTPOFF32,
2681 R_TILEPRO_TLS_TPOFF32,
2682 R_TILEPRO_IMM16_X0_TLS_LE,
2683 R_TILEPRO_IMM16_X1_TLS_LE,
2684 R_TILEPRO_IMM16_X0_TLS_LE_LO,
2685 R_TILEPRO_IMM16_X1_TLS_LE_LO,
2686 R_TILEPRO_IMM16_X0_TLS_LE_HI,
2687 R_TILEPRO_IMM16_X1_TLS_LE_HI,
2688 R_TILEPRO_IMM16_X0_TLS_LE_HA,
2689 R_TILEPRO_IMM16_X1_TLS_LE_HA,
2690 R_TILEPRO_GNU_VTINHERIT,
2691 R_TILEPRO_GNU_VTENTRY,
2692 );
2693 static FLAGS_R_TILEGX: &[Flag<u32>] = &flags!(
2694 R_TILEGX_NONE,
2695 R_TILEGX_64,
2696 R_TILEGX_32,
2697 R_TILEGX_16,
2698 R_TILEGX_8,
2699 R_TILEGX_64_PCREL,
2700 R_TILEGX_32_PCREL,
2701 R_TILEGX_16_PCREL,
2702 R_TILEGX_8_PCREL,
2703 R_TILEGX_HW0,
2704 R_TILEGX_HW1,
2705 R_TILEGX_HW2,
2706 R_TILEGX_HW3,
2707 R_TILEGX_HW0_LAST,
2708 R_TILEGX_HW1_LAST,
2709 R_TILEGX_HW2_LAST,
2710 R_TILEGX_COPY,
2711 R_TILEGX_GLOB_DAT,
2712 R_TILEGX_JMP_SLOT,
2713 R_TILEGX_RELATIVE,
2714 R_TILEGX_BROFF_X1,
2715 R_TILEGX_JUMPOFF_X1,
2716 R_TILEGX_JUMPOFF_X1_PLT,
2717 R_TILEGX_IMM8_X0,
2718 R_TILEGX_IMM8_Y0,
2719 R_TILEGX_IMM8_X1,
2720 R_TILEGX_IMM8_Y1,
2721 R_TILEGX_DEST_IMM8_X1,
2722 R_TILEGX_MT_IMM14_X1,
2723 R_TILEGX_MF_IMM14_X1,
2724 R_TILEGX_MMSTART_X0,
2725 R_TILEGX_MMEND_X0,
2726 R_TILEGX_SHAMT_X0,
2727 R_TILEGX_SHAMT_X1,
2728 R_TILEGX_SHAMT_Y0,
2729 R_TILEGX_SHAMT_Y1,
2730 R_TILEGX_IMM16_X0_HW0,
2731 R_TILEGX_IMM16_X1_HW0,
2732 R_TILEGX_IMM16_X0_HW1,
2733 R_TILEGX_IMM16_X1_HW1,
2734 R_TILEGX_IMM16_X0_HW2,
2735 R_TILEGX_IMM16_X1_HW2,
2736 R_TILEGX_IMM16_X0_HW3,
2737 R_TILEGX_IMM16_X1_HW3,
2738 R_TILEGX_IMM16_X0_HW0_LAST,
2739 R_TILEGX_IMM16_X1_HW0_LAST,
2740 R_TILEGX_IMM16_X0_HW1_LAST,
2741 R_TILEGX_IMM16_X1_HW1_LAST,
2742 R_TILEGX_IMM16_X0_HW2_LAST,
2743 R_TILEGX_IMM16_X1_HW2_LAST,
2744 R_TILEGX_IMM16_X0_HW0_PCREL,
2745 R_TILEGX_IMM16_X1_HW0_PCREL,
2746 R_TILEGX_IMM16_X0_HW1_PCREL,
2747 R_TILEGX_IMM16_X1_HW1_PCREL,
2748 R_TILEGX_IMM16_X0_HW2_PCREL,
2749 R_TILEGX_IMM16_X1_HW2_PCREL,
2750 R_TILEGX_IMM16_X0_HW3_PCREL,
2751 R_TILEGX_IMM16_X1_HW3_PCREL,
2752 R_TILEGX_IMM16_X0_HW0_LAST_PCREL,
2753 R_TILEGX_IMM16_X1_HW0_LAST_PCREL,
2754 R_TILEGX_IMM16_X0_HW1_LAST_PCREL,
2755 R_TILEGX_IMM16_X1_HW1_LAST_PCREL,
2756 R_TILEGX_IMM16_X0_HW2_LAST_PCREL,
2757 R_TILEGX_IMM16_X1_HW2_LAST_PCREL,
2758 R_TILEGX_IMM16_X0_HW0_GOT,
2759 R_TILEGX_IMM16_X1_HW0_GOT,
2760 R_TILEGX_IMM16_X0_HW0_PLT_PCREL,
2761 R_TILEGX_IMM16_X1_HW0_PLT_PCREL,
2762 R_TILEGX_IMM16_X0_HW1_PLT_PCREL,
2763 R_TILEGX_IMM16_X1_HW1_PLT_PCREL,
2764 R_TILEGX_IMM16_X0_HW2_PLT_PCREL,
2765 R_TILEGX_IMM16_X1_HW2_PLT_PCREL,
2766 R_TILEGX_IMM16_X0_HW0_LAST_GOT,
2767 R_TILEGX_IMM16_X1_HW0_LAST_GOT,
2768 R_TILEGX_IMM16_X0_HW1_LAST_GOT,
2769 R_TILEGX_IMM16_X1_HW1_LAST_GOT,
2770 R_TILEGX_IMM16_X0_HW3_PLT_PCREL,
2771 R_TILEGX_IMM16_X1_HW3_PLT_PCREL,
2772 R_TILEGX_IMM16_X0_HW0_TLS_GD,
2773 R_TILEGX_IMM16_X1_HW0_TLS_GD,
2774 R_TILEGX_IMM16_X0_HW0_TLS_LE,
2775 R_TILEGX_IMM16_X1_HW0_TLS_LE,
2776 R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
2777 R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
2778 R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
2779 R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
2780 R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,
2781 R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,
2782 R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,
2783 R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,
2784 R_TILEGX_IMM16_X0_HW0_TLS_IE,
2785 R_TILEGX_IMM16_X1_HW0_TLS_IE,
2786 R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL,
2787 R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL,
2788 R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL,
2789 R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL,
2790 R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL,
2791 R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL,
2792 R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE,
2793 R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE,
2794 R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE,
2795 R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE,
2796 R_TILEGX_TLS_DTPMOD64,
2797 R_TILEGX_TLS_DTPOFF64,
2798 R_TILEGX_TLS_TPOFF64,
2799 R_TILEGX_TLS_DTPMOD32,
2800 R_TILEGX_TLS_DTPOFF32,
2801 R_TILEGX_TLS_TPOFF32,
2802 R_TILEGX_TLS_GD_CALL,
2803 R_TILEGX_IMM8_X0_TLS_GD_ADD,
2804 R_TILEGX_IMM8_X1_TLS_GD_ADD,
2805 R_TILEGX_IMM8_Y0_TLS_GD_ADD,
2806 R_TILEGX_IMM8_Y1_TLS_GD_ADD,
2807 R_TILEGX_TLS_IE_LOAD,
2808 R_TILEGX_IMM8_X0_TLS_ADD,
2809 R_TILEGX_IMM8_X1_TLS_ADD,
2810 R_TILEGX_IMM8_Y0_TLS_ADD,
2811 R_TILEGX_IMM8_Y1_TLS_ADD,
2812 R_TILEGX_GNU_VTINHERIT,
2813 R_TILEGX_GNU_VTENTRY,
2814 );
2815 static FLAGS_R_RISCV: &[Flag<u32>] = &flags!(
2816 R_RISCV_NONE,
2817 R_RISCV_32,
2818 R_RISCV_64,
2819 R_RISCV_RELATIVE,
2820 R_RISCV_COPY,
2821 R_RISCV_JUMP_SLOT,
2822 R_RISCV_TLS_DTPMOD32,
2823 R_RISCV_TLS_DTPMOD64,
2824 R_RISCV_TLS_DTPREL32,
2825 R_RISCV_TLS_DTPREL64,
2826 R_RISCV_TLS_TPREL32,
2827 R_RISCV_TLS_TPREL64,
2828 R_RISCV_BRANCH,
2829 R_RISCV_JAL,
2830 R_RISCV_CALL,
2831 R_RISCV_CALL_PLT,
2832 R_RISCV_GOT_HI20,
2833 R_RISCV_TLS_GOT_HI20,
2834 R_RISCV_TLS_GD_HI20,
2835 R_RISCV_PCREL_HI20,
2836 R_RISCV_PCREL_LO12_I,
2837 R_RISCV_PCREL_LO12_S,
2838 R_RISCV_HI20,
2839 R_RISCV_LO12_I,
2840 R_RISCV_LO12_S,
2841 R_RISCV_TPREL_HI20,
2842 R_RISCV_TPREL_LO12_I,
2843 R_RISCV_TPREL_LO12_S,
2844 R_RISCV_TPREL_ADD,
2845 R_RISCV_ADD8,
2846 R_RISCV_ADD16,
2847 R_RISCV_ADD32,
2848 R_RISCV_ADD64,
2849 R_RISCV_SUB8,
2850 R_RISCV_SUB16,
2851 R_RISCV_SUB32,
2852 R_RISCV_SUB64,
2853 R_RISCV_GNU_VTINHERIT,
2854 R_RISCV_GNU_VTENTRY,
2855 R_RISCV_ALIGN,
2856 R_RISCV_RVC_BRANCH,
2857 R_RISCV_RVC_JUMP,
2858 R_RISCV_RVC_LUI,
2859 R_RISCV_GPREL_I,
2860 R_RISCV_GPREL_S,
2861 R_RISCV_TPREL_I,
2862 R_RISCV_TPREL_S,
2863 R_RISCV_RELAX,
2864 R_RISCV_SUB6,
2865 R_RISCV_SET6,
2866 R_RISCV_SET8,
2867 R_RISCV_SET16,
2868 R_RISCV_SET32,
2869 R_RISCV_32_PCREL,
2870 );
2871 static FLAGS_R_BPF: &[Flag<u32>] = &flags!(R_BPF_NONE, R_BPF_64_64, R_BPF_64_32);
2872 static FLAGS_R_METAG: &[Flag<u32>] = &flags!(
2873 R_METAG_HIADDR16,
2874 R_METAG_LOADDR16,
2875 R_METAG_ADDR32,
2876 R_METAG_NONE,
2877 R_METAG_RELBRANCH,
2878 R_METAG_GETSETOFF,
2879 R_METAG_REG32OP1,
2880 R_METAG_REG32OP2,
2881 R_METAG_REG32OP3,
2882 R_METAG_REG16OP1,
2883 R_METAG_REG16OP2,
2884 R_METAG_REG16OP3,
2885 R_METAG_REG32OP4,
2886 R_METAG_HIOG,
2887 R_METAG_LOOG,
2888 R_METAG_REL8,
2889 R_METAG_REL16,
2890 R_METAG_GNU_VTINHERIT,
2891 R_METAG_GNU_VTENTRY,
2892 R_METAG_HI16_GOTOFF,
2893 R_METAG_LO16_GOTOFF,
2894 R_METAG_GETSET_GOTOFF,
2895 R_METAG_GETSET_GOT,
2896 R_METAG_HI16_GOTPC,
2897 R_METAG_LO16_GOTPC,
2898 R_METAG_HI16_PLT,
2899 R_METAG_LO16_PLT,
2900 R_METAG_RELBRANCH_PLT,
2901 R_METAG_GOTOFF,
2902 R_METAG_PLT,
2903 R_METAG_COPY,
2904 R_METAG_JMP_SLOT,
2905 R_METAG_RELATIVE,
2906 R_METAG_GLOB_DAT,
2907 R_METAG_TLS_GD,
2908 R_METAG_TLS_LDM,
2909 R_METAG_TLS_LDO_HI16,
2910 R_METAG_TLS_LDO_LO16,
2911 R_METAG_TLS_LDO,
2912 R_METAG_TLS_IE,
2913 R_METAG_TLS_IENONPIC,
2914 R_METAG_TLS_IENONPIC_HI16,
2915 R_METAG_TLS_IENONPIC_LO16,
2916 R_METAG_TLS_TPOFF,
2917 R_METAG_TLS_DTPMOD,
2918 R_METAG_TLS_DTPOFF,
2919 R_METAG_TLS_LE,
2920 R_METAG_TLS_LE_HI16,
2921 R_METAG_TLS_LE_LO16,
2922 );
2923 static FLAGS_R_NDS32: &[Flag<u32>] = &flags!(
2924 R_NDS32_NONE,
2925 R_NDS32_32_RELA,
2926 R_NDS32_COPY,
2927 R_NDS32_GLOB_DAT,
2928 R_NDS32_JMP_SLOT,
2929 R_NDS32_RELATIVE,
2930 R_NDS32_TLS_TPOFF,
2931 R_NDS32_TLS_DESC,
2932 );
2933 static FLAGS_NT_CORE: &[Flag<u32>] = &flags!(
2934 NT_PRSTATUS,
2935 NT_PRFPREG,
2936 NT_FPREGSET,
2937 NT_PRPSINFO,
2938 NT_PRXREG,
2939 NT_TASKSTRUCT,
2940 NT_PLATFORM,
2941 NT_AUXV,
2942 NT_GWINDOWS,
2943 NT_ASRS,
2944 NT_PSTATUS,
2945 NT_PSINFO,
2946 NT_PRCRED,
2947 NT_UTSNAME,
2948 NT_LWPSTATUS,
2949 NT_LWPSINFO,
2950 NT_PRFPXREG,
2951 NT_SIGINFO,
2952 NT_FILE,
2953 NT_PRXFPREG,
2954 NT_PPC_VMX,
2955 NT_PPC_SPE,
2956 NT_PPC_VSX,
2957 NT_PPC_TAR,
2958 NT_PPC_PPR,
2959 NT_PPC_DSCR,
2960 NT_PPC_EBB,
2961 NT_PPC_PMU,
2962 NT_PPC_TM_CGPR,
2963 NT_PPC_TM_CFPR,
2964 NT_PPC_TM_CVMX,
2965 NT_PPC_TM_CVSX,
2966 NT_PPC_TM_SPR,
2967 NT_PPC_TM_CTAR,
2968 NT_PPC_TM_CPPR,
2969 NT_PPC_TM_CDSCR,
2970 NT_PPC_PKEY,
2971 NT_386_TLS,
2972 NT_386_IOPERM,
2973 NT_X86_XSTATE,
2974 NT_S390_HIGH_GPRS,
2975 NT_S390_TIMER,
2976 NT_S390_TODCMP,
2977 NT_S390_TODPREG,
2978 NT_S390_CTRS,
2979 NT_S390_PREFIX,
2980 NT_S390_LAST_BREAK,
2981 NT_S390_SYSTEM_CALL,
2982 NT_S390_TDB,
2983 NT_S390_VXRS_LOW,
2984 NT_S390_VXRS_HIGH,
2985 NT_S390_GS_CB,
2986 NT_S390_GS_BC,
2987 NT_S390_RI_CB,
2988 NT_ARM_VFP,
2989 NT_ARM_TLS,
2990 NT_ARM_HW_BREAK,
2991 NT_ARM_HW_WATCH,
2992 NT_ARM_SYSTEM_CALL,
2993 NT_ARM_SVE,
2994 NT_VMCOREDD,
2995 NT_MIPS_DSP,
2996 NT_MIPS_FP_MODE,
2997 );
2998 static FLAGS_NT_SOLARIS: &[Flag<u32>] = &flags!(NT_SOLARIS_PAGESIZE_HINT);
2999 static FLAGS_NT_GNU: &[Flag<u32>] = &flags!(
3000 NT_GNU_ABI_TAG,
3001 NT_GNU_HWCAP,
3002 NT_GNU_BUILD_ID,
3003 NT_GNU_GOLD_VERSION,
3004 NT_GNU_PROPERTY_TYPE_0,
3005 );
3006 static FLAGS_GRP: &[Flag<u32>] = &flags!(GRP_COMDAT);
3007 static FLAGS_DT: &[Flag<u32>] = &flags!(
3008 DT_NULL,
3009 DT_NEEDED,
3010 DT_PLTRELSZ,
3011 DT_PLTGOT,
3012 DT_HASH,
3013 DT_STRTAB,
3014 DT_SYMTAB,
3015 DT_RELA,
3016 DT_RELASZ,
3017 DT_RELAENT,
3018 DT_STRSZ,
3019 DT_SYMENT,
3020 DT_INIT,
3021 DT_FINI,
3022 DT_SONAME,
3023 DT_RPATH,
3024 DT_SYMBOLIC,
3025 DT_REL,
3026 DT_RELSZ,
3027 DT_RELENT,
3028 DT_PLTREL,
3029 DT_DEBUG,
3030 DT_TEXTREL,
3031 DT_JMPREL,
3032 DT_BIND_NOW,
3033 DT_INIT_ARRAY,
3034 DT_FINI_ARRAY,
3035 DT_INIT_ARRAYSZ,
3036 DT_FINI_ARRAYSZ,
3037 DT_RUNPATH,
3038 DT_FLAGS,
3039 DT_PREINIT_ARRAY,
3040 DT_PREINIT_ARRAYSZ,
3041 DT_SYMTAB_SHNDX,
3042 DT_GNU_PRELINKED,
3043 DT_GNU_CONFLICTSZ,
3044 DT_GNU_LIBLISTSZ,
3045 DT_CHECKSUM,
3046 DT_PLTPADSZ,
3047 DT_MOVEENT,
3048 DT_MOVESZ,
3049 DT_FEATURE_1,
3050 DT_POSFLAG_1,
3051 DT_SYMINSZ,
3052 DT_SYMINENT,
3053 DT_GNU_HASH,
3054 DT_TLSDESC_PLT,
3055 DT_TLSDESC_GOT,
3056 DT_GNU_CONFLICT,
3057 DT_GNU_LIBLIST,
3058 DT_CONFIG,
3059 DT_DEPAUDIT,
3060 DT_AUDIT,
3061 DT_PLTPAD,
3062 DT_MOVETAB,
3063 DT_SYMINFO,
3064 DT_VERSYM,
3065 DT_RELACOUNT,
3066 DT_RELCOUNT,
3067 DT_FLAGS_1,
3068 DT_VERDEF,
3069 DT_VERDEFNUM,
3070 DT_VERNEED,
3071 DT_VERNEEDNUM,
3072 DT_AUXILIARY,
3073 DT_FILTER,
3074 );
3075 static FLAGS_DT_SPARC: &[Flag<u32>] = &flags!(DT_SPARC_REGISTER);
3076 static FLAGS_DT_MIPS: &[Flag<u32>] = &flags!(
3077 DT_MIPS_RLD_VERSION,
3078 DT_MIPS_TIME_STAMP,
3079 DT_MIPS_ICHECKSUM,
3080 DT_MIPS_IVERSION,
3081 DT_MIPS_FLAGS,
3082 DT_MIPS_BASE_ADDRESS,
3083 DT_MIPS_MSYM,
3084 DT_MIPS_CONFLICT,
3085 DT_MIPS_LIBLIST,
3086 DT_MIPS_LOCAL_GOTNO,
3087 DT_MIPS_CONFLICTNO,
3088 DT_MIPS_LIBLISTNO,
3089 DT_MIPS_SYMTABNO,
3090 DT_MIPS_UNREFEXTNO,
3091 DT_MIPS_GOTSYM,
3092 DT_MIPS_HIPAGENO,
3093 DT_MIPS_RLD_MAP,
3094 DT_MIPS_DELTA_CLASS,
3095 DT_MIPS_DELTA_CLASS_NO,
3096 DT_MIPS_DELTA_INSTANCE,
3097 DT_MIPS_DELTA_INSTANCE_NO,
3098 DT_MIPS_DELTA_RELOC,
3099 DT_MIPS_DELTA_RELOC_NO,
3100 DT_MIPS_DELTA_SYM,
3101 DT_MIPS_DELTA_SYM_NO,
3102 DT_MIPS_DELTA_CLASSSYM,
3103 DT_MIPS_DELTA_CLASSSYM_NO,
3104 DT_MIPS_CXX_FLAGS,
3105 DT_MIPS_PIXIE_INIT,
3106 DT_MIPS_SYMBOL_LIB,
3107 DT_MIPS_LOCALPAGE_GOTIDX,
3108 DT_MIPS_LOCAL_GOTIDX,
3109 DT_MIPS_HIDDEN_GOTIDX,
3110 DT_MIPS_PROTECTED_GOTIDX,
3111 DT_MIPS_OPTIONS,
3112 DT_MIPS_INTERFACE,
3113 DT_MIPS_DYNSTR_ALIGN,
3114 DT_MIPS_INTERFACE_SIZE,
3115 DT_MIPS_RLD_TEXT_RESOLVE_ADDR,
3116 DT_MIPS_PERF_SUFFIX,
3117 DT_MIPS_COMPACT_SIZE,
3118 DT_MIPS_GP_VALUE,
3119 DT_MIPS_AUX_DYNAMIC,
3120 DT_MIPS_PLTGOT,
3121 DT_MIPS_RWPLT,
3122 DT_MIPS_RLD_MAP_REL,
3123 );
3124 static FLAGS_DT_ALPHA: &[Flag<u32>] = &flags!(DT_ALPHA_PLTRO);
3125 static FLAGS_DT_PPC: &[Flag<u32>] = &flags!(DT_PPC_GOT, DT_PPC_OPT);
3126 static FLAGS_DT_PPC64: &[Flag<u32>] =
3127 &flags!(DT_PPC64_GLINK, DT_PPC64_OPD, DT_PPC64_OPDSZ, DT_PPC64_OPT);
3128 static FLAGS_DT_IA_64: &[Flag<u32>] = &flags!(DT_IA_64_PLT_RESERVE);
3129 static FLAGS_DT_NIOS2: &[Flag<u32>] = &flags!(DT_NIOS2_GP);
3130 static FLAGS_DF: &[Flag<u32>] = &flags!(
3131 DF_ORIGIN,
3132 DF_SYMBOLIC,
3133 DF_TEXTREL,
3134 DF_BIND_NOW,
3135 DF_STATIC_TLS,
3136 );
3137 static FLAGS_DF_1: &[Flag<u32>] = &flags!(
3138 DF_1_NOW,
3139 DF_1_GLOBAL,
3140 DF_1_GROUP,
3141 DF_1_NODELETE,
3142 DF_1_LOADFLTR,
3143 DF_1_INITFIRST,
3144 DF_1_NOOPEN,
3145 DF_1_ORIGIN,
3146 DF_1_DIRECT,
3147 DF_1_TRANS,
3148 DF_1_INTERPOSE,
3149 DF_1_NODEFLIB,
3150 DF_1_NODUMP,
3151 DF_1_CONFALT,
3152 DF_1_ENDFILTEE,
3153 DF_1_DISPRELDNE,
3154 DF_1_DISPRELPND,
3155 DF_1_NODIRECT,
3156 DF_1_IGNMULDEF,
3157 DF_1_NOKSYMS,
3158 DF_1_NOHDR,
3159 DF_1_EDITED,
3160 DF_1_NORELOC,
3161 DF_1_SYMINTPOSE,
3162 DF_1_GLOBAUDIT,
3163 DF_1_SINGLETON,
3164 DF_1_STUB,
3165 DF_1_PIE,
3166 );
3167 }
3168