//! Example that uses the lower level read API.

use object::read::archive::ArchiveFile;
use object::read::macho::{FatArch, FatHeader};
use object::Endianness;
use std::convert::TryInto;
use std::io::Write;
use std::{env, fmt, fs, io, process, str};

fn main() {
    let arg_len = env::args().len();
    if arg_len <= 1 {
        eprintln!("Usage: {} <file> ...", env::args().next().unwrap());
        process::exit(1);
    }

    for file_path in env::args().skip(1) {
        if arg_len > 2 {
            println!();
            println!("{}:", file_path);
        }

        let file = match fs::File::open(&file_path) {
            Ok(file) => file,
            Err(err) => {
                println!("Failed to open file '{}': {}", file_path, err);
                continue;
            }
        };
        let file = match unsafe { memmap::Mmap::map(&file) } {
            Ok(mmap) => mmap,
            Err(err) => {
                println!("Failed to map file '{}': {}", file_path, err);
                continue;
            }
        };

        let stdout = io::stdout();
        let mut printer = Printer::new(stdout.lock());
        print_object(&mut printer, &*file);
    }
}

struct Printer<W: Write> {
    w: W,
    indent: usize,
}

impl<W: Write> Printer<W> {
    fn new(w: W) -> Self {
        Self { w, indent: 0 }
    }

    fn blank(&mut self) {
        writeln!(self.w).unwrap();
    }

    fn print_indent(&mut self) {
        if self.indent != 0 {
            write!(self.w, "{:-1$}", " ", self.indent * 4).unwrap();
        }
    }

    fn print_string(&mut self, s: &[u8]) {
        if let Ok(s) = str::from_utf8(s) {
            write!(self.w, "\"{}\"", s).unwrap();
        } else {
            write!(self.w, "{:X?}", s).unwrap();
        }
    }

    fn indent<F: FnOnce(&mut Self)>(&mut self, f: F) {
        self.indent += 1;
        f(self);
        self.indent -= 1;
    }

    fn group<F: FnOnce(&mut Self)>(&mut self, name: &str, f: F) {
        self.print_indent();
        writeln!(self.w, "{} {{", name).unwrap();
        self.indent(f);
        self.print_indent();
        writeln!(self.w, "}}").unwrap();
    }

    fn field_name(&mut self, name: &str) {
        self.print_indent();
        if !name.is_empty() {
            write!(self.w, "{}: ", name).unwrap();
        }
    }

    fn field<T: fmt::Display>(&mut self, name: &str, value: T) {
        self.field_name(name);
        writeln!(self.w, "{}", value).unwrap();
    }

    fn field_hex<T: fmt::UpperHex>(&mut self, name: &str, value: T) {
        self.field_name(name);
        writeln!(self.w, "0x{:X}", value).unwrap();
    }

    fn field_bytes(&mut self, name: &str, value: &[u8]) {
        self.field_name(name);
        writeln!(self.w, "{:X?}", value).unwrap();
    }

    fn field_string<T: fmt::UpperHex>(&mut self, name: &str, value: T, s: Option<&[u8]>) {
        if let Some(s) = s {
            self.field_name(name);
            self.print_string(s);
            writeln!(self.w, " (0x{:X})", value).unwrap();
        } else {
            self.field_hex(name, value);
        }
    }

    fn field_inline_string(&mut self, name: &str, s: &[u8]) {
        self.field_name(name);
        self.print_string(s);
        writeln!(self.w).unwrap();
    }

    fn field_enum<T: Eq + fmt::UpperHex>(&mut self, name: &str, value: T, flags: &[Flag<T>]) {
        for flag in flags {
            if value == flag.value {
                self.field_name(name);
                writeln!(self.w, "{} (0x{:X})", flag.name, value).unwrap();
                return;
            }
        }
        self.field_hex(name, value);
    }

    fn field_enums<T: Eq + fmt::UpperHex>(&mut self, name: &str, value: T, enums: &[&[Flag<T>]]) {
        for flags in enums {
            for flag in *flags {
                if value == flag.value {
                    self.field_name(name);
                    writeln!(self.w, "{} (0x{:X})", flag.name, value).unwrap();
                    return;
                }
            }
        }
        self.field_hex(name, value);
    }

    fn flags<T: Into<u64>, U: Copy + Into<u64>>(&mut self, value: T, mask: U, flags: &[Flag<U>]) {
        let value = value.into();
        let mask = mask.into();
        self.indent(|p| {
            if mask != 0 {
                for flag in flags {
                    if value & mask == flag.value.into() {
                        p.print_indent();
                        writeln!(p.w, "{} (0x{:X})", flag.name, flag.value.into()).unwrap();
                        return;
                    }
                }
                p.print_indent();
                writeln!(p.w, "<unknown> (0x{:X})", value & mask).unwrap();
            } else {
                for flag in flags {
                    if value & flag.value.into() == flag.value.into() {
                        p.print_indent();
                        writeln!(p.w, "{} (0x{:X})", flag.name, flag.value.into()).unwrap();
                    }
                }
                // TODO: display unknown flags (need to display all flags at once for this)
            }
        });
    }
}

struct Flag<T> {
    value: T,
    name: &'static str,
}

macro_rules! flags {
    ($($name:ident),+ $(,)?) => ( [ $(Flag { value: $name, name: stringify!($name), }),+ ] )
}

fn print_object(p: &mut Printer<impl Write>, data: &[u8]) {
    let kind = match object::FileKind::parse(data) {
        Ok(file) => file,
        Err(err) => {
            println!("Failed to parse file: {}", err);
            return;
        }
    };
    match kind {
        object::FileKind::Archive => print_archive(p, data),
        object::FileKind::Coff => pe::print_coff(p, data),
        object::FileKind::Elf32 => elf::print_elf32(p, data),
        object::FileKind::Elf64 => elf::print_elf64(p, data),
        object::FileKind::MachO32 => macho::print_macho32(p, data),
        object::FileKind::MachO64 => macho::print_macho64(p, data),
        object::FileKind::MachOFat32 => macho::print_macho_fat32(p, data),
        object::FileKind::MachOFat64 => macho::print_macho_fat64(p, data),
        object::FileKind::Pe32 => pe::print_pe32(p, data),
        object::FileKind::Pe64 => pe::print_pe64(p, data),
        // TODO
        _ => {}
    }
}

fn print_archive(p: &mut Printer<impl Write>, data: &[u8]) {
    if let Ok(archive) = ArchiveFile::parse(data) {
        p.field("Format", format!("Archive ({:?})", archive.kind()));
        for member in archive.members() {
            if let Ok(member) = member {
                p.blank();
                p.field("Member", String::from_utf8_lossy(member.name()));
                if let Ok(data) = member.data(data) {
                    print_object(p, data);
                }
            }
        }
    }
}

mod elf {
    use super::*;
    use object::elf::*;
    use object::read::elf::*;

    pub(super) fn print_elf32(p: &mut Printer<impl Write>, data: &[u8]) {
        if let Ok(elf) = FileHeader32::<Endianness>::parse(data) {
            println!("Format: ELF 32-bit");
            print_elf(p, elf, data);
        }
    }

    pub(super) fn print_elf64(p: &mut Printer<impl Write>, data: &[u8]) {
        if let Ok(elf) = FileHeader64::<Endianness>::parse(data) {
            println!("Format: ELF 64-bit");
            print_elf(p, elf, data);
        }
    }

    fn print_elf<Elf: FileHeader<Endian = Endianness>>(
        p: &mut Printer<impl Write>,
        elf: &Elf,
        data: &[u8],
    ) {
        if let Ok(endian) = elf.endian() {
            print_file_header(p, endian, elf);
            if let Ok(segments) = elf.program_headers(endian, data) {
                print_program_headers(p, endian, data, elf, segments);
            }
            if let Ok(sections) = elf.sections(endian, data) {
                print_section_headers(p, endian, data, elf, &sections);
            }
        }
    }

    fn print_file_header<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        elf: &Elf,
    ) {
        p.group("FileHeader", |p| {
            p.group("Ident", |p| print_ident(p, elf.e_ident()));
            p.field_enum("Type", elf.e_type(endian), &FLAGS_ET);
            p.field_enum("Machine", elf.e_machine(endian), &FLAGS_EM);
            let version = elf.e_version(endian);
            if version < 256 {
                p.field_enum("Version", version as u8, &FLAGS_EV);
            } else {
                p.field_hex("Version", version);
            }
            p.field_enum("Type", elf.e_type(endian), &FLAGS_ET);
            p.field_hex("Entry", elf.e_entry(endian).into());
            p.field_hex("ProgramHeaderOffset", elf.e_phoff(endian).into());
            p.field_hex("SectionHeaderOffset", elf.e_shoff(endian).into());
            let flags = elf.e_flags(endian);
            p.field_hex("Flags", flags);
            match elf.e_machine(endian) {
                EM_SPARC => p.flags(flags, 0, &FLAGS_EF_SPARC),
                EM_SPARCV9 => p.flags(flags, 0, &FLAGS_EF_SPARCV9),
                EM_MIPS => {
                    p.flags(flags, 0, &FLAGS_EF_MIPS);
                    p.flags(flags, EF_MIPS_ARCH, &FLAGS_EF_MIPS_ARCH);
                }
                EM_PARISC => {
                    p.flags(flags, 0, &FLAGS_EF_PARISC);
                    p.flags(flags, EF_PARISC_ARCH, &FLAGS_EF_PARISC_ARCH);
                }
                EM_ALPHA => p.flags(flags, 0, &FLAGS_EF_ALPHA),
                EM_PPC => p.flags(flags, 0, &FLAGS_EF_PPC),
                EM_PPC64 => p.flags(flags, 0, &FLAGS_EF_PPC64),
                EM_ARM => {
                    p.flags(flags, 0, &FLAGS_EF_ARM);
                    p.flags(flags, EF_ARM_EABIMASK, &FLAGS_EF_ARM_EABI);
                }
                EM_CSKY => p.flags(flags, EF_CSKY_ABIMASK, &FLAGS_EF_CSKY_ABI),
                EM_IA_64 => p.flags(flags, 0, &FLAGS_EF_IA_64),
                EM_SH => p.flags(flags, EF_SH_MACH_MASK, &FLAGS_EF_SH_MACH),
                EM_S390 => p.flags(flags, 0, &FLAGS_EF_S390),
                EM_RISCV => {
                    p.flags(flags, 0, &FLAGS_EF_RISCV);
                    p.flags(flags, EF_RISCV_FLOAT_ABI, &FLAGS_EF_RISCV_FLOAT_ABI);
                }
                _ => {}
            };
            p.field_hex("HeaderSize", elf.e_ehsize(endian));
            p.field_hex("ProgramHeaderEntrySize", elf.e_phentsize(endian));
            p.field("ProgramHeaderCount", elf.e_phnum(endian));
            p.field_hex("SectionHeaderEntrySize", elf.e_shentsize(endian));
            p.field("SectionHeaderCount", elf.e_shnum(endian));
            p.field("SectionHeaderStringTableIndex", elf.e_shstrndx(endian));
        });
    }

    fn print_ident(p: &mut Printer<impl Write>, ident: &Ident) {
        p.field("Magic", format!("{:X?}", ident.magic));
        p.field_enum("Class", ident.class, &FLAGS_EI_CLASS);
        p.field_enum("Data", ident.data, &FLAGS_EI_DATA);
        p.field_enum("Version", ident.version, &FLAGS_EV);
        p.field_enum("OsAbi", ident.os_abi, &FLAGS_EI_OSABI);
        p.field_hex("AbiVersion", ident.abi_version);
        p.field("Unused", format!("{:X?}", ident.padding));
    }

    fn print_program_headers<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        elf: &Elf,
        segments: &[Elf::ProgramHeader],
    ) {
        for segment in segments {
            p.group("ProgramHeader", |p| {
                let proc = match elf.e_machine(endian) {
                    EM_MIPS => FLAGS_PT_MIPS,
                    EM_PARISC => FLAGS_PT_PARISC,
                    EM_ARM => FLAGS_PT_ARM,
                    EM_IA_64 => FLAGS_PT_IA_64,
                    _ => &[],
                };
                let os = match elf.e_ident().os_abi {
                    ELFOSABI_HPUX => FLAGS_PT_HP,
                    _ => &[],
                };
                p.field_enums("Type", segment.p_type(endian), &[FLAGS_PT, proc, os]);

                p.field_hex("Offset", segment.p_offset(endian).into());
                p.field_hex("VirtualAddress", segment.p_vaddr(endian).into());
                p.field_hex("PhysicalAddress", segment.p_paddr(endian).into());
                p.field_hex("FileSize", segment.p_filesz(endian).into());
                p.field_hex("MemorySize", segment.p_memsz(endian).into());

                let flags = segment.p_flags(endian);
                p.field_hex("Flags", flags);
                p.flags(flags, 0, FLAGS_PF);
                match elf.e_ident().os_abi {
                    ELFOSABI_HPUX => p.flags(flags, 0, FLAGS_PF_HP),
                    _ => {}
                };
                match elf.e_machine(endian) {
                    EM_MIPS => p.flags(flags, 0, FLAGS_PF_MIPS),
                    EM_PARISC => p.flags(flags, 0, FLAGS_PF_PARISC),
                    EM_ARM => p.flags(flags, 0, FLAGS_PF_ARM),
                    EM_IA_64 => p.flags(flags, 0, FLAGS_PF_IA_64),
                    _ => {}
                };

                p.field_hex("Align", segment.p_align(endian).into());

                match segment.p_type(endian) {
                    PT_NOTE => print_segment_notes(p, endian, data, elf, segment),
                    PT_DYNAMIC => print_segment_dynamic(p, endian, data, elf, segments, segment),
                    // TODO:
                    //PT_INTERP =>
                    //PT_SHLIB =>
                    //PT_PHDR =>
                    //PT_TLS =>
                    //PT_GNU_EH_FRAME =>
                    //PT_GNU_STACK =>
                    //PT_GNU_RELRO =>
                    _ => {}
                }
            });
        }
    }

    fn print_segment_notes<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        _elf: &Elf,
        segment: &Elf::ProgramHeader,
    ) {
        if let Ok(Some(notes)) = segment.notes(endian, data) {
            print_notes(p, endian, notes);
        }
    }

    fn print_segment_dynamic<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        elf: &Elf,
        segments: &[Elf::ProgramHeader],
        segment: &Elf::ProgramHeader,
    ) {
        if let Ok(Some(dynamic)) = segment.dynamic(endian, data) {
            // TODO: add a helper API for this and the other mandatory tags?
            let mut strtab = 0;
            let mut strsz = 0;
            for d in dynamic {
                let tag = d.d_tag(endian).into();
                if tag == DT_STRTAB.into() {
                    strtab = d.d_val(endian).into();
                } else if tag == DT_STRSZ.into() {
                    strsz = d.d_val(endian).into();
                }
            }
            let mut dynstr = object::StringTable::default();
            for s in segments {
                if let Ok(Some(data)) = s.data_range(endian, data, strtab, strsz) {
                    dynstr = object::StringTable::new(data);
                    break;
                }
            }

            let proc = match elf.e_machine(endian) {
                EM_SPARC => FLAGS_DT_SPARC,
                EM_MIPS => FLAGS_DT_MIPS,
                EM_ALPHA => FLAGS_DT_ALPHA,
                EM_PPC => FLAGS_DT_PPC,
                EM_PPC64 => FLAGS_DT_PPC64,
                EM_IA_64 => FLAGS_DT_IA_64,
                EM_ALTERA_NIOS2 => FLAGS_DT_NIOS2,
                _ => &[],
            };
            for d in dynamic {
                let tag = d.d_tag(endian).into();
                let val = d.d_val(endian).into();
                p.group("Dynamic", |p| {
                    if let Ok(tag) = tag.try_into() {
                        p.field_enums("Tag", tag, &[FLAGS_DT, proc]);
                        if tag == DT_NEEDED {
                            p.field_string(
                                "Value",
                                val,
                                val.try_into().ok().and_then(|val| dynstr.get(val).ok()),
                            );
                        } else {
                            p.field_hex("Value", val);
                            if tag == DT_FLAGS {
                                p.flags(val, 0, FLAGS_DF);
                            } else if tag == DT_FLAGS_1 {
                                p.flags(val, 0, FLAGS_DF_1);
                            }
                        }
                    } else {
                        p.field_hex("Tag", tag);
                        p.field_hex("Value", val);
                    }
                });
                if tag == DT_NULL.into() {
                    break;
                }
            }
        }
    }

    fn print_section_headers<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        elf: &Elf,
        sections: &SectionTable<Elf>,
    ) {
        for (index, section) in sections.iter().enumerate() {
            p.group("SectionHeader", |p| {
                p.field("Index", index);
                p.field_string(
                    "Name",
                    section.sh_name(endian),
                    sections.section_name(endian, section).ok(),
                );

                let proc = match elf.e_machine(endian) {
                    EM_MIPS => FLAGS_SHT_MIPS,
                    EM_PARISC => FLAGS_SHT_PARISC,
                    EM_ALPHA => FLAGS_SHT_ALPHA,
                    EM_ARM => FLAGS_SHT_ARM,
                    EM_CSKY => FLAGS_SHT_CSKY,
                    EM_IA_64 => FLAGS_SHT_IA_64,
                    EM_X86_64 => FLAGS_SHT_X86_64,
                    _ => &[],
                };
                p.field_enums("Type", section.sh_type(endian), &[FLAGS_SHT, proc]);

                let flags = section.sh_flags(endian).into();
                p.field_hex("Flags", flags);
                p.flags(flags, 0, FLAGS_SHF);
                match elf.e_machine(endian) {
                    EM_MIPS => p.flags(flags, 0, FLAGS_SHF_MIPS),
                    EM_PARISC => p.flags(flags, 0, FLAGS_SHF_PARISC),
                    EM_ALPHA => p.flags(flags, 0, FLAGS_SHF_ALPHA),
                    EM_ARM => p.flags(flags, 0, FLAGS_SHF_ARM),
                    EM_IA_64 => p.flags(flags, 0, FLAGS_SHF_IA_64),
                    _ => {}
                }

                p.field_hex("Address", section.sh_addr(endian).into());
                p.field_hex("Offset", section.sh_offset(endian).into());
                p.field_hex("Size", section.sh_size(endian).into());
                p.field("Link", section.sh_link(endian));
                p.field("Info", section.sh_info(endian));
                p.field_hex("AddressAlign", section.sh_addralign(endian).into());
                p.field_hex("EntrySize", section.sh_entsize(endian).into());

                match section.sh_type(endian) {
                    SHT_SYMTAB | SHT_DYNSYM => {
                        print_section_symbols(p, endian, data, elf, sections, index, section)
                    }
                    SHT_REL => print_section_rel(p, endian, data, elf, sections, section),
                    SHT_RELA => print_section_rela(p, endian, data, elf, sections, section),
                    SHT_NOTE => print_section_notes(p, endian, data, elf, section),
                    SHT_GROUP => print_section_group(p, endian, data, elf, sections, section),
                    // TODO:
                    //SHT_HASH =>
                    //SHT_DYNAMIC =>
                    //SHT_SHLIB =>
                    //SHT_INIT_ARRAY =>
                    //SHT_FINI_ARRAY =>
                    //SHT_PREINIT_ARRAY =>
                    _ => {}
                }
            });
        }
    }

    fn print_section_symbols<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        elf: &Elf,
        sections: &SectionTable<Elf>,
        section_index: usize,
        section: &Elf::SectionHeader,
    ) {
        if let Ok(Some(symbols)) = section.symbols(endian, data, sections, section_index) {
            let os_stt = match elf.e_ident().os_abi {
                ELFOSABI_GNU => FLAGS_STT_GNU,
                ELFOSABI_HPUX => FLAGS_STT_HP,
                _ => &[],
            };
            let proc_stt = match elf.e_machine(endian) {
                EM_SPARC => FLAGS_STT_SPARC,
                EM_PARISC => FLAGS_STT_PARISC,
                EM_ARM => FLAGS_STT_ARM,
                _ => &[],
            };
            let os_stb = match elf.e_ident().os_abi {
                ELFOSABI_GNU => FLAGS_STB_GNU,
                _ => &[],
            };
            let proc_stb = match elf.e_machine(endian) {
                EM_MIPS => FLAGS_STB_MIPS,
                _ => &[],
            };
            let proc_shn = match elf.e_machine(endian) {
                EM_MIPS => FLAGS_SHN_MIPS,
                EM_PARISC => FLAGS_SHN_PARISC,
                _ => &[],
            };
            for (index, symbol) in symbols.iter().enumerate() {
                p.group("Symbol", |p| {
                    p.field("Index", index);
                    p.field_string(
                        "Name",
                        symbol.st_name(endian),
                        symbol.name(endian, symbols.strings()).ok(),
                    );
                    p.field_hex("Value", symbol.st_value(endian).into());
                    p.field_hex("Size", symbol.st_size(endian).into());
                    p.field_enums("Type", symbol.st_type(), &[FLAGS_STT, os_stt, proc_stt]);
                    p.field_enums("Bind", symbol.st_bind(), &[FLAGS_STB, os_stb, proc_stb]);

                    let other = symbol.st_other();
                    if other & !0x3 == 0 {
                        p.field_enum("Other", other, FLAGS_STV);
                    } else {
                        p.field_hex("Other", other);
                        p.flags(other, 0x3, FLAGS_STV);
                        match elf.e_machine(endian) {
                            EM_MIPS => p.flags(other, 0, FLAGS_STO_MIPS),
                            EM_ALPHA => p.flags(other, 0, FLAGS_STO_ALPHA),
                            EM_PPC64 => p.field_hex(
                                "Local",
                                (other & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT,
                            ),
                            _ => {}
                        }
                    }

                    let shndx = symbol.st_shndx(endian);
                    if shndx == SHN_UNDEF || shndx >= SHN_LORESERVE {
                        p.field_enums("SectionIndex", shndx, &[FLAGS_SHN, proc_shn]);
                    } else {
                        p.field("SectionIndex", shndx);
                    }
                    if let Some(shndx) = symbols.shndx(index) {
                        p.field("ExtendedSectionIndex", shndx);
                    }
                });
            }
        }
    }

    fn print_section_rel<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        elf: &Elf,
        sections: &SectionTable<Elf>,
        section: &Elf::SectionHeader,
    ) {
        if let Ok(Some(relocations)) = section.rel(endian, data) {
            let symbols = section.relocation_symbols(endian, data, sections).ok();
            let proc = rel_flag_type(endian, elf);
            for relocation in relocations {
                p.group("Relocation", |p| {
                    p.field_hex("Offset", relocation.r_offset(endian).into());
                    p.field_enum("Type", relocation.r_type(endian), proc);
                    let sym = relocation.r_sym(endian);
                    p.field_string("Symbol", sym, rel_symbol(endian, symbols, sym as usize));
                });
            }
        }
    }

    fn print_section_rela<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        elf: &Elf,
        sections: &SectionTable<Elf>,
        section: &Elf::SectionHeader,
    ) {
        if let Ok(Some(relocations)) = section.rela(endian, data) {
            let symbols = section.relocation_symbols(endian, data, sections).ok();
            let proc = rel_flag_type(endian, elf);
            for relocation in relocations {
                p.group("Relocation", |p| {
                    p.field_hex("Offset", relocation.r_offset(endian).into());
                    p.field_enum(
                        "Type",
                        relocation.r_type(endian, elf.is_mips64el(endian)),
                        proc,
                    );
                    let sym = relocation.r_sym(endian, elf.is_mips64el(endian));
                    p.field_string("Symbol", sym, rel_symbol(endian, symbols, sym as usize));
                    let addend = relocation.r_addend(endian).into() as u64;
                    if addend != 0 {
                        p.field_hex("Addend", addend);
                    }
                });
            }
        }
    }

    fn rel_symbol<'data, Elf: FileHeader>(
        endian: Elf::Endian,
        symbols: Option<SymbolTable<'data, Elf>>,
        sym: usize,
    ) -> Option<&'data [u8]> {
        let symbols = symbols?;
        let symbol = symbols.symbol(sym as usize).ok()?;
        symbol.name(endian, symbols.strings()).ok()
    }

    fn rel_flag_type<Elf: FileHeader>(endian: Elf::Endian, elf: &Elf) -> &'static [Flag<u32>] {
        match elf.e_machine(endian) {
            EM_68K => FLAGS_R_68K,
            EM_386 => FLAGS_R_386,
            EM_SPARC => FLAGS_R_SPARC,
            EM_MIPS => FLAGS_R_MIPS,
            EM_PARISC => FLAGS_R_PARISC,
            EM_ALPHA => FLAGS_R_ALPHA,
            EM_PPC => FLAGS_R_PPC,
            EM_PPC64 => FLAGS_R_PPC64,
            EM_AARCH64 => FLAGS_R_AARCH64,
            EM_ARM => FLAGS_R_ARM,
            EM_CSKY => FLAGS_R_CKCORE,
            EM_IA_64 => FLAGS_R_IA64,
            EM_SH => FLAGS_R_SH,
            EM_S390 => FLAGS_R_390,
            EM_CRIS => FLAGS_R_CRIS,
            EM_X86_64 => FLAGS_R_X86_64,
            EM_MN10300 => FLAGS_R_MN10300,
            EM_M32R => FLAGS_R_M32R,
            EM_MICROBLAZE => FLAGS_R_MICROBLAZE,
            EM_ALTERA_NIOS2 => FLAGS_R_NIOS2,
            EM_TILEPRO => FLAGS_R_TILEPRO,
            EM_TILEGX => FLAGS_R_TILEGX,
            EM_RISCV => FLAGS_R_RISCV,
            EM_BPF => FLAGS_R_BPF,
            EM_METAG => FLAGS_R_METAG,
            EM_NDS32 => FLAGS_R_NDS32,
            _ => &[],
        }
    }

    fn print_section_notes<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        _elf: &Elf,
        section: &Elf::SectionHeader,
    ) {
        if let Ok(Some(notes)) = section.notes(endian, data) {
            print_notes(p, endian, notes);
        }
    }

    fn print_section_group<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        data: &[u8],
        _elf: &Elf,
        sections: &SectionTable<Elf>,
        section: &Elf::SectionHeader,
    ) {
        if let Ok(Some((flag, members))) = section.group(endian, data) {
            p.field_enum("GroupFlag", flag, FLAGS_GRP);
            p.group("GroupSections", |p| {
                for member in members {
                    let index = member.get(endian);
                    p.print_indent();
                    if let Ok(section) = sections.section(index as usize) {
                        if let Ok(name) = sections.section_name(endian, section) {
                            p.print_string(name);
                            writeln!(p.w, " ({})", index).unwrap();
                        } else {
                            writeln!(p.w, "{}", index).unwrap();
                        }
                    } else {
                        writeln!(p.w, "{}", index).unwrap();
                    }
                }
            });
        }
    }

    fn print_notes<Elf: FileHeader>(
        p: &mut Printer<impl Write>,
        endian: Elf::Endian,
        mut notes: NoteIterator<Elf>,
    ) {
        while let Ok(Some(note)) = notes.next() {
            p.group("Note", |p| {
                let name = note.name();
                p.field_string("Name", note.n_namesz(endian), Some(name));
                let flags = if name == ELF_NOTE_CORE || name == ELF_NOTE_LINUX {
                    FLAGS_NT_CORE
                } else if name == ELF_NOTE_SOLARIS {
                    FLAGS_NT_SOLARIS
                } else if name == ELF_NOTE_GNU {
                    FLAGS_NT_GNU
                } else {
                    // TODO: NT_VERSION
                    &[]
                };
                p.field_enum("Type", note.n_type(endian), flags);
                // TODO: interpret desc
                p.field_bytes("Desc", note.desc());
            });
        }
    }

    static FLAGS_EI_CLASS: &[Flag<u8>] = &flags!(ELFCLASSNONE, ELFCLASS32, ELFCLASS64);
    static FLAGS_EI_DATA: &[Flag<u8>] = &flags!(ELFDATANONE, ELFDATA2LSB, ELFDATA2MSB);
    static FLAGS_EV: &[Flag<u8>] = &flags!(EV_NONE, EV_CURRENT);
    static FLAGS_EI_OSABI: &[Flag<u8>] = &flags!(
        ELFOSABI_SYSV,
        ELFOSABI_HPUX,
        ELFOSABI_NETBSD,
        ELFOSABI_GNU,
        ELFOSABI_SOLARIS,
        ELFOSABI_AIX,
        ELFOSABI_IRIX,
        ELFOSABI_FREEBSD,
        ELFOSABI_TRU64,
        ELFOSABI_MODESTO,
        ELFOSABI_OPENBSD,
        ELFOSABI_ARM_AEABI,
        ELFOSABI_ARM,
        ELFOSABI_STANDALONE,
    );
    static FLAGS_ET: &[Flag<u16>] = &flags!(ET_NONE, ET_REL, ET_EXEC, ET_DYN, ET_CORE);
    static FLAGS_EM: &[Flag<u16>] = &flags!(
        EM_NONE,
        EM_M32,
        EM_SPARC,
        EM_386,
        EM_68K,
        EM_88K,
        EM_IAMCU,
        EM_860,
        EM_MIPS,
        EM_S370,
        EM_MIPS_RS3_LE,
        EM_PARISC,
        EM_VPP500,
        EM_SPARC32PLUS,
        EM_960,
        EM_PPC,
        EM_PPC64,
        EM_S390,
        EM_SPU,
        EM_V800,
        EM_FR20,
        EM_RH32,
        EM_RCE,
        EM_ARM,
        EM_FAKE_ALPHA,
        EM_SH,
        EM_SPARCV9,
        EM_TRICORE,
        EM_ARC,
        EM_H8_300,
        EM_H8_300H,
        EM_H8S,
        EM_H8_500,
        EM_IA_64,
        EM_MIPS_X,
        EM_COLDFIRE,
        EM_68HC12,
        EM_MMA,
        EM_PCP,
        EM_NCPU,
        EM_NDR1,
        EM_STARCORE,
        EM_ME16,
        EM_ST100,
        EM_TINYJ,
        EM_X86_64,
        EM_PDSP,
        EM_PDP10,
        EM_PDP11,
        EM_FX66,
        EM_ST9PLUS,
        EM_ST7,
        EM_68HC16,
        EM_68HC11,
        EM_68HC08,
        EM_68HC05,
        EM_SVX,
        EM_ST19,
        EM_VAX,
        EM_CRIS,
        EM_JAVELIN,
        EM_FIREPATH,
        EM_ZSP,
        EM_MMIX,
        EM_HUANY,
        EM_PRISM,
        EM_AVR,
        EM_FR30,
        EM_D10V,
        EM_D30V,
        EM_V850,
        EM_M32R,
        EM_MN10300,
        EM_MN10200,
        EM_PJ,
        EM_OPENRISC,
        EM_ARC_COMPACT,
        EM_XTENSA,
        EM_VIDEOCORE,
        EM_TMM_GPP,
        EM_NS32K,
        EM_TPC,
        EM_SNP1K,
        EM_ST200,
        EM_IP2K,
        EM_MAX,
        EM_CR,
        EM_F2MC16,
        EM_MSP430,
        EM_BLACKFIN,
        EM_SE_C33,
        EM_SEP,
        EM_ARCA,
        EM_UNICORE,
        EM_EXCESS,
        EM_DXP,
        EM_ALTERA_NIOS2,
        EM_CRX,
        EM_XGATE,
        EM_C166,
        EM_M16C,
        EM_DSPIC30F,
        EM_CE,
        EM_M32C,
        EM_TSK3000,
        EM_RS08,
        EM_SHARC,
        EM_ECOG2,
        EM_SCORE7,
        EM_DSP24,
        EM_VIDEOCORE3,
        EM_LATTICEMICO32,
        EM_SE_C17,
        EM_TI_C6000,
        EM_TI_C2000,
        EM_TI_C5500,
        EM_TI_ARP32,
        EM_TI_PRU,
        EM_MMDSP_PLUS,
        EM_CYPRESS_M8C,
        EM_R32C,
        EM_TRIMEDIA,
        EM_HEXAGON,
        EM_8051,
        EM_STXP7X,
        EM_NDS32,
        EM_ECOG1X,
        EM_MAXQ30,
        EM_XIMO16,
        EM_MANIK,
        EM_CRAYNV2,
        EM_RX,
        EM_METAG,
        EM_MCST_ELBRUS,
        EM_ECOG16,
        EM_CR16,
        EM_ETPU,
        EM_SLE9X,
        EM_L10M,
        EM_K10M,
        EM_AARCH64,
        EM_AVR32,
        EM_STM8,
        EM_TILE64,
        EM_TILEPRO,
        EM_MICROBLAZE,
        EM_CUDA,
        EM_TILEGX,
        EM_CLOUDSHIELD,
        EM_COREA_1ST,
        EM_COREA_2ND,
        EM_ARC_COMPACT2,
        EM_OPEN8,
        EM_RL78,
        EM_VIDEOCORE5,
        EM_78KOR,
        EM_56800EX,
        EM_BA1,
        EM_BA2,
        EM_XCORE,
        EM_MCHP_PIC,
        EM_KM32,
        EM_KMX32,
        EM_EMX16,
        EM_EMX8,
        EM_KVARC,
        EM_CDP,
        EM_COGE,
        EM_COOL,
        EM_NORC,
        EM_CSR_KALIMBA,
        EM_Z80,
        EM_VISIUM,
        EM_FT32,
        EM_MOXIE,
        EM_AMDGPU,
        EM_RISCV,
        EM_BPF,
        EM_CSKY,
        EM_ALPHA,
    );
    static FLAGS_EF_SPARC: &[Flag<u32>] = &flags!(
        EF_SPARC_LEDATA,
        EF_SPARC_EXT_MASK,
        EF_SPARC_32PLUS,
        EF_SPARC_SUN_US1,
        EF_SPARC_HAL_R1,
        EF_SPARC_SUN_US3,
    );
    static FLAGS_EF_SPARCV9: &[Flag<u32>] = &flags!(
        EF_SPARCV9_MM,
        EF_SPARCV9_TSO,
        EF_SPARCV9_PSO,
        EF_SPARCV9_RMO,
    );
    static FLAGS_EF_MIPS: &[Flag<u32>] = &flags!(
        EF_MIPS_NOREORDER,
        EF_MIPS_PIC,
        EF_MIPS_CPIC,
        EF_MIPS_XGOT,
        EF_MIPS_64BIT_WHIRL,
        EF_MIPS_ABI2,
        EF_MIPS_ABI_ON32,
        EF_MIPS_FP64,
        EF_MIPS_NAN2008,
    );
    static FLAGS_EF_MIPS_ARCH: &[Flag<u32>] = &flags!(
        EF_MIPS_ARCH_1,
        EF_MIPS_ARCH_2,
        EF_MIPS_ARCH_3,
        EF_MIPS_ARCH_4,
        EF_MIPS_ARCH_5,
        EF_MIPS_ARCH_32,
        EF_MIPS_ARCH_64,
        EF_MIPS_ARCH_32R2,
        EF_MIPS_ARCH_64R2,
    );
    static FLAGS_EF_PARISC: &[Flag<u32>] = &flags!(
        EF_PARISC_TRAPNIL,
        EF_PARISC_EXT,
        EF_PARISC_LSB,
        EF_PARISC_WIDE,
        EF_PARISC_NO_KABP,
        EF_PARISC_LAZYSWAP,
    );
    static FLAGS_EF_PARISC_ARCH: &[Flag<u32>] =
        &flags!(EFA_PARISC_1_0, EFA_PARISC_1_1, EFA_PARISC_2_0);
    static FLAGS_EF_ALPHA: &[Flag<u32>] = &flags!(EF_ALPHA_32BIT, EF_ALPHA_CANRELAX);
    static FLAGS_EF_PPC: &[Flag<u32>] =
        &flags!(EF_PPC_EMB, EF_PPC_RELOCATABLE, EF_PPC_RELOCATABLE_LIB);
    static FLAGS_EF_PPC64: &[Flag<u32>] = &flags!(EF_PPC64_ABI);
    static FLAGS_EF_ARM: &[Flag<u32>] = &flags!(
        EF_ARM_RELEXEC,
        EF_ARM_HASENTRY,
        EF_ARM_INTERWORK,
        EF_ARM_APCS_26,
        EF_ARM_APCS_FLOAT,
        EF_ARM_PIC,
        EF_ARM_ALIGN8,
        EF_ARM_NEW_ABI,
        EF_ARM_OLD_ABI,
        EF_ARM_SOFT_FLOAT,
        EF_ARM_VFP_FLOAT,
        EF_ARM_MAVERICK_FLOAT,
        EF_ARM_BE8,
        EF_ARM_LE8,
    );
    static FLAGS_EF_ARM_EABI: &[Flag<u32>] = &flags!(
        EF_ARM_EABI_UNKNOWN,
        EF_ARM_EABI_VER1,
        EF_ARM_EABI_VER2,
        EF_ARM_EABI_VER3,
        EF_ARM_EABI_VER4,
        EF_ARM_EABI_VER5,
    );
    static FLAGS_EF_CSKY_ABI: &[Flag<u32>] = &flags!(EF_CSKY_ABIV1, EF_CSKY_ABIV2);
    static FLAGS_EF_IA_64: &[Flag<u32>] = &flags!(EF_IA_64_ABI64);
    static FLAGS_EF_SH_MACH: &[Flag<u32>] = &flags!(
        EF_SH_UNKNOWN,
        EF_SH1,
        EF_SH2,
        EF_SH3,
        EF_SH_DSP,
        EF_SH3_DSP,
        EF_SH4AL_DSP,
        EF_SH3E,
        EF_SH4,
        EF_SH2E,
        EF_SH4A,
        EF_SH2A,
        EF_SH4_NOFPU,
        EF_SH4A_NOFPU,
        EF_SH4_NOMMU_NOFPU,
        EF_SH2A_NOFPU,
        EF_SH3_NOMMU,
        EF_SH2A_SH4_NOFPU,
        EF_SH2A_SH3_NOFPU,
        EF_SH2A_SH4,
        EF_SH2A_SH3E,
    );
    static FLAGS_EF_S390: &[Flag<u32>] = &flags!(EF_S390_HIGH_GPRS);
    static FLAGS_EF_RISCV: &[Flag<u32>] = &flags!(EF_RISCV_RVC);
    static FLAGS_EF_RISCV_FLOAT_ABI: &[Flag<u32>] = &flags!(
        EF_RISCV_FLOAT_ABI_SOFT,
        EF_RISCV_FLOAT_ABI_SINGLE,
        EF_RISCV_FLOAT_ABI_DOUBLE,
        EF_RISCV_FLOAT_ABI_QUAD,
    );
    static FLAGS_PT: &[Flag<u32>] = &flags!(
        PT_NULL,
        PT_LOAD,
        PT_DYNAMIC,
        PT_INTERP,
        PT_NOTE,
        PT_SHLIB,
        PT_PHDR,
        PT_TLS,
        PT_LOOS,
        PT_GNU_EH_FRAME,
        PT_GNU_STACK,
        PT_GNU_RELRO,
    );
    static FLAGS_PT_HP: &[Flag<u32>] = &flags!(
        PT_HP_TLS,
        PT_HP_CORE_NONE,
        PT_HP_CORE_VERSION,
        PT_HP_CORE_KERNEL,
        PT_HP_CORE_COMM,
        PT_HP_CORE_PROC,
        PT_HP_CORE_LOADABLE,
        PT_HP_CORE_STACK,
        PT_HP_CORE_SHM,
        PT_HP_CORE_MMF,
        PT_HP_PARALLEL,
        PT_HP_FASTBIND,
        PT_HP_OPT_ANNOT,
        PT_HP_HSL_ANNOT,
        PT_HP_STACK,
    );
    static FLAGS_PT_MIPS: &[Flag<u32>] = &flags!(
        PT_MIPS_REGINFO,
        PT_MIPS_RTPROC,
        PT_MIPS_OPTIONS,
        PT_MIPS_ABIFLAGS,
    );
    static FLAGS_PT_PARISC: &[Flag<u32>] = &flags!(PT_PARISC_ARCHEXT, PT_PARISC_UNWIND);
    static FLAGS_PT_ARM: &[Flag<u32>] = &flags!(PT_ARM_EXIDX);
    static FLAGS_PT_IA_64: &[Flag<u32>] = &flags!(PT_IA_64_ARCHEXT, PT_IA_64_UNWIND);
    static FLAGS_PF: &[Flag<u32>] = &flags!(PF_X, PF_W, PF_R);
    static FLAGS_PF_HP: &[Flag<u32>] = &flags!(
        PF_HP_PAGE_SIZE,
        PF_HP_FAR_SHARED,
        PF_HP_NEAR_SHARED,
        PF_HP_CODE,
        PF_HP_MODIFY,
        PF_HP_LAZYSWAP,
        PF_HP_SBP,
    );
    static FLAGS_PF_MIPS: &[Flag<u32>] = &flags!(PF_MIPS_LOCAL);
    static FLAGS_PF_PARISC: &[Flag<u32>] = &flags!(PF_PARISC_SBP);
    static FLAGS_PF_ARM: &[Flag<u32>] = &flags!(PF_ARM_SB, PF_ARM_PI, PF_ARM_ABS);
    static FLAGS_PF_IA_64: &[Flag<u32>] = &flags!(PF_IA_64_NORECOV);
    static FLAGS_SHT: &[Flag<u32>] = &flags!(
        SHT_NULL,
        SHT_PROGBITS,
        SHT_SYMTAB,
        SHT_STRTAB,
        SHT_RELA,
        SHT_HASH,
        SHT_DYNAMIC,
        SHT_NOTE,
        SHT_NOBITS,
        SHT_REL,
        SHT_SHLIB,
        SHT_DYNSYM,
        SHT_INIT_ARRAY,
        SHT_FINI_ARRAY,
        SHT_PREINIT_ARRAY,
        SHT_GROUP,
        SHT_SYMTAB_SHNDX,
    );
    static FLAGS_SHT_MIPS: &[Flag<u32>] = &flags!(
        SHT_MIPS_LIBLIST,
        SHT_MIPS_MSYM,
        SHT_MIPS_CONFLICT,
        SHT_MIPS_GPTAB,
        SHT_MIPS_UCODE,
        SHT_MIPS_DEBUG,
        SHT_MIPS_REGINFO,
        SHT_MIPS_PACKAGE,
        SHT_MIPS_PACKSYM,
        SHT_MIPS_RELD,
        SHT_MIPS_IFACE,
        SHT_MIPS_CONTENT,
        SHT_MIPS_OPTIONS,
        SHT_MIPS_SHDR,
        SHT_MIPS_FDESC,
        SHT_MIPS_EXTSYM,
        SHT_MIPS_DENSE,
        SHT_MIPS_PDESC,
        SHT_MIPS_LOCSYM,
        SHT_MIPS_AUXSYM,
        SHT_MIPS_OPTSYM,
        SHT_MIPS_LOCSTR,
        SHT_MIPS_LINE,
        SHT_MIPS_RFDESC,
        SHT_MIPS_DELTASYM,
        SHT_MIPS_DELTAINST,
        SHT_MIPS_DELTACLASS,
        SHT_MIPS_DWARF,
        SHT_MIPS_DELTADECL,
        SHT_MIPS_SYMBOL_LIB,
        SHT_MIPS_EVENTS,
        SHT_MIPS_TRANSLATE,
        SHT_MIPS_PIXIE,
        SHT_MIPS_XLATE,
        SHT_MIPS_XLATE_DEBUG,
        SHT_MIPS_WHIRL,
        SHT_MIPS_EH_REGION,
        SHT_MIPS_XLATE_OLD,
        SHT_MIPS_PDR_EXCEPTION,
    );
    static FLAGS_SHT_PARISC: &[Flag<u32>] =
        &flags!(SHT_PARISC_EXT, SHT_PARISC_UNWIND, SHT_PARISC_DOC);
    static FLAGS_SHT_ALPHA: &[Flag<u32>] = &flags!(SHT_ALPHA_DEBUG, SHT_ALPHA_REGINFO);
    static FLAGS_SHT_ARM: &[Flag<u32>] =
        &flags!(SHT_ARM_EXIDX, SHT_ARM_PREEMPTMAP, SHT_ARM_ATTRIBUTES);
    static FLAGS_SHT_CSKY: &[Flag<u32>] = &flags!(SHT_CSKY_ATTRIBUTES);
    static FLAGS_SHT_IA_64: &[Flag<u32>] = &flags!(SHT_IA_64_EXT, SHT_IA_64_UNWIND);
    static FLAGS_SHT_X86_64: &[Flag<u32>] = &flags!(SHT_X86_64_UNWIND);
    static FLAGS_SHF: &[Flag<u32>] = &flags!(
        SHF_WRITE,
        SHF_ALLOC,
        SHF_EXECINSTR,
        SHF_MERGE,
        SHF_STRINGS,
        SHF_INFO_LINK,
        SHF_LINK_ORDER,
        SHF_OS_NONCONFORMING,
        SHF_GROUP,
        SHF_TLS,
        SHF_COMPRESSED,
    );
    static FLAGS_SHF_MIPS: &[Flag<u32>] = &flags!(
        SHF_MIPS_GPREL,
        SHF_MIPS_MERGE,
        SHF_MIPS_ADDR,
        SHF_MIPS_STRINGS,
        SHF_MIPS_NOSTRIP,
        SHF_MIPS_LOCAL,
        SHF_MIPS_NAMES,
        SHF_MIPS_NODUPE,
    );
    static FLAGS_SHF_PARISC: &[Flag<u32>] =
        &flags!(SHF_PARISC_SHORT, SHF_PARISC_HUGE, SHF_PARISC_SBP);
    static FLAGS_SHF_ALPHA: &[Flag<u32>] = &flags!(SHF_ALPHA_GPREL);
    static FLAGS_SHF_ARM: &[Flag<u32>] = &flags!(SHF_ARM_ENTRYSECT, SHF_ARM_COMDEF);
    static FLAGS_SHF_IA_64: &[Flag<u32>] = &flags!(SHF_IA_64_SHORT, SHF_IA_64_NORECOV);
    static FLAGS_STT: &[Flag<u8>] = &flags!(
        STT_NOTYPE,
        STT_OBJECT,
        STT_FUNC,
        STT_SECTION,
        STT_FILE,
        STT_COMMON,
        STT_TLS,
    );
    static FLAGS_STT_GNU: &[Flag<u8>] = &flags!(STT_GNU_IFUNC);
    static FLAGS_STT_HP: &[Flag<u8>] = &flags!(STT_HP_OPAQUE, STT_HP_STUB);
    static FLAGS_STT_SPARC: &[Flag<u8>] = &flags!(STT_SPARC_REGISTER);
    static FLAGS_STT_PARISC: &[Flag<u8>] = &flags!(STT_PARISC_MILLICODE);
    static FLAGS_STT_ARM: &[Flag<u8>] = &flags!(STT_ARM_TFUNC, STT_ARM_16BIT);
    static FLAGS_STB: &[Flag<u8>] = &flags!(STB_LOCAL, STB_GLOBAL, STB_WEAK);
    static FLAGS_STB_GNU: &[Flag<u8>] = &flags!(STB_GNU_UNIQUE);
    static FLAGS_STB_MIPS: &[Flag<u8>] = &flags!(STB_MIPS_SPLIT_COMMON);
    static FLAGS_STV: &[Flag<u8>] = &flags!(STV_DEFAULT, STV_INTERNAL, STV_HIDDEN, STV_PROTECTED);
    static FLAGS_STO_MIPS: &[Flag<u8>] = &flags!(STO_MIPS_PLT);
    static FLAGS_STO_ALPHA: &[Flag<u8>] = &flags!(STO_ALPHA_NOPV, STO_ALPHA_STD_GPLOAD);
    static FLAGS_SHN: &[Flag<u16>] = &flags!(SHN_UNDEF, SHN_ABS, SHN_COMMON, SHN_XINDEX);
    static FLAGS_SHN_MIPS: &[Flag<u16>] = &flags!(
        SHN_MIPS_ACOMMON,
        SHN_MIPS_TEXT,
        SHN_MIPS_DATA,
        SHN_MIPS_SCOMMON,
        SHN_MIPS_SUNDEFINED,
    );
    static FLAGS_SHN_PARISC: &[Flag<u16>] = &flags!(SHN_PARISC_ANSI_COMMON, SHN_PARISC_HUGE_COMMON);
    static FLAGS_R_68K: &[Flag<u32>] = &flags!(
        R_68K_NONE,
        R_68K_32,
        R_68K_16,
        R_68K_8,
        R_68K_PC32,
        R_68K_PC16,
        R_68K_PC8,
        R_68K_GOT32,
        R_68K_GOT16,
        R_68K_GOT8,
        R_68K_GOT32O,
        R_68K_GOT16O,
        R_68K_GOT8O,
        R_68K_PLT32,
        R_68K_PLT16,
        R_68K_PLT8,
        R_68K_PLT32O,
        R_68K_PLT16O,
        R_68K_PLT8O,
        R_68K_COPY,
        R_68K_GLOB_DAT,
        R_68K_JMP_SLOT,
        R_68K_RELATIVE,
        R_68K_TLS_GD32,
        R_68K_TLS_GD16,
        R_68K_TLS_GD8,
        R_68K_TLS_LDM32,
        R_68K_TLS_LDM16,
        R_68K_TLS_LDM8,
        R_68K_TLS_LDO32,
        R_68K_TLS_LDO16,
        R_68K_TLS_LDO8,
        R_68K_TLS_IE32,
        R_68K_TLS_IE16,
        R_68K_TLS_IE8,
        R_68K_TLS_LE32,
        R_68K_TLS_LE16,
        R_68K_TLS_LE8,
        R_68K_TLS_DTPMOD32,
        R_68K_TLS_DTPREL32,
        R_68K_TLS_TPREL32,
    );
    static FLAGS_R_386: &[Flag<u32>] = &flags!(
        R_386_NONE,
        R_386_32,
        R_386_PC32,
        R_386_GOT32,
        R_386_PLT32,
        R_386_COPY,
        R_386_GLOB_DAT,
        R_386_JMP_SLOT,
        R_386_RELATIVE,
        R_386_GOTOFF,
        R_386_GOTPC,
        R_386_32PLT,
        R_386_TLS_TPOFF,
        R_386_TLS_IE,
        R_386_TLS_GOTIE,
        R_386_TLS_LE,
        R_386_TLS_GD,
        R_386_TLS_LDM,
        R_386_16,
        R_386_PC16,
        R_386_8,
        R_386_PC8,
        R_386_TLS_GD_32,
        R_386_TLS_GD_PUSH,
        R_386_TLS_GD_CALL,
        R_386_TLS_GD_POP,
        R_386_TLS_LDM_32,
        R_386_TLS_LDM_PUSH,
        R_386_TLS_LDM_CALL,
        R_386_TLS_LDM_POP,
        R_386_TLS_LDO_32,
        R_386_TLS_IE_32,
        R_386_TLS_LE_32,
        R_386_TLS_DTPMOD32,
        R_386_TLS_DTPOFF32,
        R_386_TLS_TPOFF32,
        R_386_SIZE32,
        R_386_TLS_GOTDESC,
        R_386_TLS_DESC_CALL,
        R_386_TLS_DESC,
        R_386_IRELATIVE,
        R_386_GOT32X,
    );
    static FLAGS_R_SPARC: &[Flag<u32>] = &flags!(
        R_SPARC_NONE,
        R_SPARC_8,
        R_SPARC_16,
        R_SPARC_32,
        R_SPARC_DISP8,
        R_SPARC_DISP16,
        R_SPARC_DISP32,
        R_SPARC_WDISP30,
        R_SPARC_WDISP22,
        R_SPARC_HI22,
        R_SPARC_22,
        R_SPARC_13,
        R_SPARC_LO10,
        R_SPARC_GOT10,
        R_SPARC_GOT13,
        R_SPARC_GOT22,
        R_SPARC_PC10,
        R_SPARC_PC22,
        R_SPARC_WPLT30,
        R_SPARC_COPY,
        R_SPARC_GLOB_DAT,
        R_SPARC_JMP_SLOT,
        R_SPARC_RELATIVE,
        R_SPARC_UA32,
        R_SPARC_PLT32,
        R_SPARC_HIPLT22,
        R_SPARC_LOPLT10,
        R_SPARC_PCPLT32,
        R_SPARC_PCPLT22,
        R_SPARC_PCPLT10,
        R_SPARC_10,
        R_SPARC_11,
        R_SPARC_64,
        R_SPARC_OLO10,
        R_SPARC_HH22,
        R_SPARC_HM10,
        R_SPARC_LM22,
        R_SPARC_PC_HH22,
        R_SPARC_PC_HM10,
        R_SPARC_PC_LM22,
        R_SPARC_WDISP16,
        R_SPARC_WDISP19,
        R_SPARC_GLOB_JMP,
        R_SPARC_7,
        R_SPARC_5,
        R_SPARC_6,
        R_SPARC_DISP64,
        R_SPARC_PLT64,
        R_SPARC_HIX22,
        R_SPARC_LOX10,
        R_SPARC_H44,
        R_SPARC_M44,
        R_SPARC_L44,
        R_SPARC_REGISTER,
        R_SPARC_UA64,
        R_SPARC_UA16,
        R_SPARC_TLS_GD_HI22,
        R_SPARC_TLS_GD_LO10,
        R_SPARC_TLS_GD_ADD,
        R_SPARC_TLS_GD_CALL,
        R_SPARC_TLS_LDM_HI22,
        R_SPARC_TLS_LDM_LO10,
        R_SPARC_TLS_LDM_ADD,
        R_SPARC_TLS_LDM_CALL,
        R_SPARC_TLS_LDO_HIX22,
        R_SPARC_TLS_LDO_LOX10,
        R_SPARC_TLS_LDO_ADD,
        R_SPARC_TLS_IE_HI22,
        R_SPARC_TLS_IE_LO10,
        R_SPARC_TLS_IE_LD,
        R_SPARC_TLS_IE_LDX,
        R_SPARC_TLS_IE_ADD,
        R_SPARC_TLS_LE_HIX22,
        R_SPARC_TLS_LE_LOX10,
        R_SPARC_TLS_DTPMOD32,
        R_SPARC_TLS_DTPMOD64,
        R_SPARC_TLS_DTPOFF32,
        R_SPARC_TLS_DTPOFF64,
        R_SPARC_TLS_TPOFF32,
        R_SPARC_TLS_TPOFF64,
        R_SPARC_GOTDATA_HIX22,
        R_SPARC_GOTDATA_LOX10,
        R_SPARC_GOTDATA_OP_HIX22,
        R_SPARC_GOTDATA_OP_LOX10,
        R_SPARC_GOTDATA_OP,
        R_SPARC_H34,
        R_SPARC_SIZE32,
        R_SPARC_SIZE64,
        R_SPARC_WDISP10,
        R_SPARC_JMP_IREL,
        R_SPARC_IRELATIVE,
        R_SPARC_GNU_VTINHERIT,
        R_SPARC_GNU_VTENTRY,
        R_SPARC_REV32,
    );
    static FLAGS_R_MIPS: &[Flag<u32>] = &flags!(
        R_MIPS_NONE,
        R_MIPS_16,
        R_MIPS_32,
        R_MIPS_REL32,
        R_MIPS_26,
        R_MIPS_HI16,
        R_MIPS_LO16,
        R_MIPS_GPREL16,
        R_MIPS_LITERAL,
        R_MIPS_GOT16,
        R_MIPS_PC16,
        R_MIPS_CALL16,
        R_MIPS_GPREL32,
        R_MIPS_SHIFT5,
        R_MIPS_SHIFT6,
        R_MIPS_64,
        R_MIPS_GOT_DISP,
        R_MIPS_GOT_PAGE,
        R_MIPS_GOT_OFST,
        R_MIPS_GOT_HI16,
        R_MIPS_GOT_LO16,
        R_MIPS_SUB,
        R_MIPS_INSERT_A,
        R_MIPS_INSERT_B,
        R_MIPS_DELETE,
        R_MIPS_HIGHER,
        R_MIPS_HIGHEST,
        R_MIPS_CALL_HI16,
        R_MIPS_CALL_LO16,
        R_MIPS_SCN_DISP,
        R_MIPS_REL16,
        R_MIPS_ADD_IMMEDIATE,
        R_MIPS_PJUMP,
        R_MIPS_RELGOT,
        R_MIPS_JALR,
        R_MIPS_TLS_DTPMOD32,
        R_MIPS_TLS_DTPREL32,
        R_MIPS_TLS_DTPMOD64,
        R_MIPS_TLS_DTPREL64,
        R_MIPS_TLS_GD,
        R_MIPS_TLS_LDM,
        R_MIPS_TLS_DTPREL_HI16,
        R_MIPS_TLS_DTPREL_LO16,
        R_MIPS_TLS_GOTTPREL,
        R_MIPS_TLS_TPREL32,
        R_MIPS_TLS_TPREL64,
        R_MIPS_TLS_TPREL_HI16,
        R_MIPS_TLS_TPREL_LO16,
        R_MIPS_GLOB_DAT,
        R_MIPS_COPY,
        R_MIPS_JUMP_SLOT,
    );
    static FLAGS_R_PARISC: &[Flag<u32>] = &flags!(
        R_PARISC_NONE,
        R_PARISC_DIR32,
        R_PARISC_DIR21L,
        R_PARISC_DIR17R,
        R_PARISC_DIR17F,
        R_PARISC_DIR14R,
        R_PARISC_PCREL32,
        R_PARISC_PCREL21L,
        R_PARISC_PCREL17R,
        R_PARISC_PCREL17F,
        R_PARISC_PCREL14R,
        R_PARISC_DPREL21L,
        R_PARISC_DPREL14R,
        R_PARISC_GPREL21L,
        R_PARISC_GPREL14R,
        R_PARISC_LTOFF21L,
        R_PARISC_LTOFF14R,
        R_PARISC_SECREL32,
        R_PARISC_SEGBASE,
        R_PARISC_SEGREL32,
        R_PARISC_PLTOFF21L,
        R_PARISC_PLTOFF14R,
        R_PARISC_LTOFF_FPTR32,
        R_PARISC_LTOFF_FPTR21L,
        R_PARISC_LTOFF_FPTR14R,
        R_PARISC_FPTR64,
        R_PARISC_PLABEL32,
        R_PARISC_PLABEL21L,
        R_PARISC_PLABEL14R,
        R_PARISC_PCREL64,
        R_PARISC_PCREL22F,
        R_PARISC_PCREL14WR,
        R_PARISC_PCREL14DR,
        R_PARISC_PCREL16F,
        R_PARISC_PCREL16WF,
        R_PARISC_PCREL16DF,
        R_PARISC_DIR64,
        R_PARISC_DIR14WR,
        R_PARISC_DIR14DR,
        R_PARISC_DIR16F,
        R_PARISC_DIR16WF,
        R_PARISC_DIR16DF,
        R_PARISC_GPREL64,
        R_PARISC_GPREL14WR,
        R_PARISC_GPREL14DR,
        R_PARISC_GPREL16F,
        R_PARISC_GPREL16WF,
        R_PARISC_GPREL16DF,
        R_PARISC_LTOFF64,
        R_PARISC_LTOFF14WR,
        R_PARISC_LTOFF14DR,
        R_PARISC_LTOFF16F,
        R_PARISC_LTOFF16WF,
        R_PARISC_LTOFF16DF,
        R_PARISC_SECREL64,
        R_PARISC_SEGREL64,
        R_PARISC_PLTOFF14WR,
        R_PARISC_PLTOFF14DR,
        R_PARISC_PLTOFF16F,
        R_PARISC_PLTOFF16WF,
        R_PARISC_PLTOFF16DF,
        R_PARISC_LTOFF_FPTR64,
        R_PARISC_LTOFF_FPTR14WR,
        R_PARISC_LTOFF_FPTR14DR,
        R_PARISC_LTOFF_FPTR16F,
        R_PARISC_LTOFF_FPTR16WF,
        R_PARISC_LTOFF_FPTR16DF,
        R_PARISC_COPY,
        R_PARISC_IPLT,
        R_PARISC_EPLT,
        R_PARISC_TPREL32,
        R_PARISC_TPREL21L,
        R_PARISC_TPREL14R,
        R_PARISC_LTOFF_TP21L,
        R_PARISC_LTOFF_TP14R,
        R_PARISC_LTOFF_TP14F,
        R_PARISC_TPREL64,
        R_PARISC_TPREL14WR,
        R_PARISC_TPREL14DR,
        R_PARISC_TPREL16F,
        R_PARISC_TPREL16WF,
        R_PARISC_TPREL16DF,
        R_PARISC_LTOFF_TP64,
        R_PARISC_LTOFF_TP14WR,
        R_PARISC_LTOFF_TP14DR,
        R_PARISC_LTOFF_TP16F,
        R_PARISC_LTOFF_TP16WF,
        R_PARISC_LTOFF_TP16DF,
        R_PARISC_GNU_VTENTRY,
        R_PARISC_GNU_VTINHERIT,
        R_PARISC_TLS_GD21L,
        R_PARISC_TLS_GD14R,
        R_PARISC_TLS_GDCALL,
        R_PARISC_TLS_LDM21L,
        R_PARISC_TLS_LDM14R,
        R_PARISC_TLS_LDMCALL,
        R_PARISC_TLS_LDO21L,
        R_PARISC_TLS_LDO14R,
        R_PARISC_TLS_DTPMOD32,
        R_PARISC_TLS_DTPMOD64,
        R_PARISC_TLS_DTPOFF32,
        R_PARISC_TLS_DTPOFF64,
        R_PARISC_TLS_LE21L,
        R_PARISC_TLS_LE14R,
        R_PARISC_TLS_IE21L,
        R_PARISC_TLS_IE14R,
        R_PARISC_TLS_TPREL32,
        R_PARISC_TLS_TPREL64,
    );
    static FLAGS_R_ALPHA: &[Flag<u32>] = &flags!(
        R_ALPHA_NONE,
        R_ALPHA_REFLONG,
        R_ALPHA_REFQUAD,
        R_ALPHA_GPREL32,
        R_ALPHA_LITERAL,
        R_ALPHA_LITUSE,
        R_ALPHA_GPDISP,
        R_ALPHA_BRADDR,
        R_ALPHA_HINT,
        R_ALPHA_SREL16,
        R_ALPHA_SREL32,
        R_ALPHA_SREL64,
        R_ALPHA_GPRELHIGH,
        R_ALPHA_GPRELLOW,
        R_ALPHA_GPREL16,
        R_ALPHA_COPY,
        R_ALPHA_GLOB_DAT,
        R_ALPHA_JMP_SLOT,
        R_ALPHA_RELATIVE,
        R_ALPHA_TLS_GD_HI,
        R_ALPHA_TLSGD,
        R_ALPHA_TLS_LDM,
        R_ALPHA_DTPMOD64,
        R_ALPHA_GOTDTPREL,
        R_ALPHA_DTPREL64,
        R_ALPHA_DTPRELHI,
        R_ALPHA_DTPRELLO,
        R_ALPHA_DTPREL16,
        R_ALPHA_GOTTPREL,
        R_ALPHA_TPREL64,
        R_ALPHA_TPRELHI,
        R_ALPHA_TPRELLO,
        R_ALPHA_TPREL16,
    );
    static FLAGS_R_PPC: &[Flag<u32>] = &flags!(
        R_PPC_NONE,
        R_PPC_ADDR32,
        R_PPC_ADDR24,
        R_PPC_ADDR16,
        R_PPC_ADDR16_LO,
        R_PPC_ADDR16_HI,
        R_PPC_ADDR16_HA,
        R_PPC_ADDR14,
        R_PPC_ADDR14_BRTAKEN,
        R_PPC_ADDR14_BRNTAKEN,
        R_PPC_REL24,
        R_PPC_REL14,
        R_PPC_REL14_BRTAKEN,
        R_PPC_REL14_BRNTAKEN,
        R_PPC_GOT16,
        R_PPC_GOT16_LO,
        R_PPC_GOT16_HI,
        R_PPC_GOT16_HA,
        R_PPC_PLTREL24,
        R_PPC_COPY,
        R_PPC_GLOB_DAT,
        R_PPC_JMP_SLOT,
        R_PPC_RELATIVE,
        R_PPC_LOCAL24PC,
        R_PPC_UADDR32,
        R_PPC_UADDR16,
        R_PPC_REL32,
        R_PPC_PLT32,
        R_PPC_PLTREL32,
        R_PPC_PLT16_LO,
        R_PPC_PLT16_HI,
        R_PPC_PLT16_HA,
        R_PPC_SDAREL16,
        R_PPC_SECTOFF,
        R_PPC_SECTOFF_LO,
        R_PPC_SECTOFF_HI,
        R_PPC_SECTOFF_HA,
        R_PPC_TLS,
        R_PPC_DTPMOD32,
        R_PPC_TPREL16,
        R_PPC_TPREL16_LO,
        R_PPC_TPREL16_HI,
        R_PPC_TPREL16_HA,
        R_PPC_TPREL32,
        R_PPC_DTPREL16,
        R_PPC_DTPREL16_LO,
        R_PPC_DTPREL16_HI,
        R_PPC_DTPREL16_HA,
        R_PPC_DTPREL32,
        R_PPC_GOT_TLSGD16,
        R_PPC_GOT_TLSGD16_LO,
        R_PPC_GOT_TLSGD16_HI,
        R_PPC_GOT_TLSGD16_HA,
        R_PPC_GOT_TLSLD16,
        R_PPC_GOT_TLSLD16_LO,
        R_PPC_GOT_TLSLD16_HI,
        R_PPC_GOT_TLSLD16_HA,
        R_PPC_GOT_TPREL16,
        R_PPC_GOT_TPREL16_LO,
        R_PPC_GOT_TPREL16_HI,
        R_PPC_GOT_TPREL16_HA,
        R_PPC_GOT_DTPREL16,
        R_PPC_GOT_DTPREL16_LO,
        R_PPC_GOT_DTPREL16_HI,
        R_PPC_GOT_DTPREL16_HA,
        R_PPC_TLSGD,
        R_PPC_TLSLD,
        R_PPC_EMB_NADDR32,
        R_PPC_EMB_NADDR16,
        R_PPC_EMB_NADDR16_LO,
        R_PPC_EMB_NADDR16_HI,
        R_PPC_EMB_NADDR16_HA,
        R_PPC_EMB_SDAI16,
        R_PPC_EMB_SDA2I16,
        R_PPC_EMB_SDA2REL,
        R_PPC_EMB_SDA21,
        R_PPC_EMB_MRKREF,
        R_PPC_EMB_RELSEC16,
        R_PPC_EMB_RELST_LO,
        R_PPC_EMB_RELST_HI,
        R_PPC_EMB_RELST_HA,
        R_PPC_EMB_BIT_FLD,
        R_PPC_EMB_RELSDA,
        R_PPC_DIAB_SDA21_LO,
        R_PPC_DIAB_SDA21_HI,
        R_PPC_DIAB_SDA21_HA,
        R_PPC_DIAB_RELSDA_LO,
        R_PPC_DIAB_RELSDA_HI,
        R_PPC_DIAB_RELSDA_HA,
        R_PPC_IRELATIVE,
        R_PPC_REL16,
        R_PPC_REL16_LO,
        R_PPC_REL16_HI,
        R_PPC_REL16_HA,
        R_PPC_TOC16,
    );
    static FLAGS_R_PPC64: &[Flag<u32>] = &flags!(
        R_PPC64_NONE,
        R_PPC64_ADDR32,
        R_PPC64_ADDR24,
        R_PPC64_ADDR16,
        R_PPC64_ADDR16_LO,
        R_PPC64_ADDR16_HI,
        R_PPC64_ADDR16_HA,
        R_PPC64_ADDR14,
        R_PPC64_ADDR14_BRTAKEN,
        R_PPC64_ADDR14_BRNTAKEN,
        R_PPC64_REL24,
        R_PPC64_REL14,
        R_PPC64_REL14_BRTAKEN,
        R_PPC64_REL14_BRNTAKEN,
        R_PPC64_GOT16,
        R_PPC64_GOT16_LO,
        R_PPC64_GOT16_HI,
        R_PPC64_GOT16_HA,
        R_PPC64_COPY,
        R_PPC64_GLOB_DAT,
        R_PPC64_JMP_SLOT,
        R_PPC64_RELATIVE,
        R_PPC64_UADDR32,
        R_PPC64_UADDR16,
        R_PPC64_REL32,
        R_PPC64_PLT32,
        R_PPC64_PLTREL32,
        R_PPC64_PLT16_LO,
        R_PPC64_PLT16_HI,
        R_PPC64_PLT16_HA,
        R_PPC64_SECTOFF,
        R_PPC64_SECTOFF_LO,
        R_PPC64_SECTOFF_HI,
        R_PPC64_SECTOFF_HA,
        R_PPC64_ADDR30,
        R_PPC64_ADDR64,
        R_PPC64_ADDR16_HIGHER,
        R_PPC64_ADDR16_HIGHERA,
        R_PPC64_ADDR16_HIGHEST,
        R_PPC64_ADDR16_HIGHESTA,
        R_PPC64_UADDR64,
        R_PPC64_REL64,
        R_PPC64_PLT64,
        R_PPC64_PLTREL64,
        R_PPC64_TOC16,
        R_PPC64_TOC16_LO,
        R_PPC64_TOC16_HI,
        R_PPC64_TOC16_HA,
        R_PPC64_TOC,
        R_PPC64_PLTGOT16,
        R_PPC64_PLTGOT16_LO,
        R_PPC64_PLTGOT16_HI,
        R_PPC64_PLTGOT16_HA,
        R_PPC64_ADDR16_DS,
        R_PPC64_ADDR16_LO_DS,
        R_PPC64_GOT16_DS,
        R_PPC64_GOT16_LO_DS,
        R_PPC64_PLT16_LO_DS,
        R_PPC64_SECTOFF_DS,
        R_PPC64_SECTOFF_LO_DS,
        R_PPC64_TOC16_DS,
        R_PPC64_TOC16_LO_DS,
        R_PPC64_PLTGOT16_DS,
        R_PPC64_PLTGOT16_LO_DS,
        R_PPC64_TLS,
        R_PPC64_DTPMOD64,
        R_PPC64_TPREL16,
        R_PPC64_TPREL16_LO,
        R_PPC64_TPREL16_HI,
        R_PPC64_TPREL16_HA,
        R_PPC64_TPREL64,
        R_PPC64_DTPREL16,
        R_PPC64_DTPREL16_LO,
        R_PPC64_DTPREL16_HI,
        R_PPC64_DTPREL16_HA,
        R_PPC64_DTPREL64,
        R_PPC64_GOT_TLSGD16,
        R_PPC64_GOT_TLSGD16_LO,
        R_PPC64_GOT_TLSGD16_HI,
        R_PPC64_GOT_TLSGD16_HA,
        R_PPC64_GOT_TLSLD16,
        R_PPC64_GOT_TLSLD16_LO,
        R_PPC64_GOT_TLSLD16_HI,
        R_PPC64_GOT_TLSLD16_HA,
        R_PPC64_GOT_TPREL16_DS,
        R_PPC64_GOT_TPREL16_LO_DS,
        R_PPC64_GOT_TPREL16_HI,
        R_PPC64_GOT_TPREL16_HA,
        R_PPC64_GOT_DTPREL16_DS,
        R_PPC64_GOT_DTPREL16_LO_DS,
        R_PPC64_GOT_DTPREL16_HI,
        R_PPC64_GOT_DTPREL16_HA,
        R_PPC64_TPREL16_DS,
        R_PPC64_TPREL16_LO_DS,
        R_PPC64_TPREL16_HIGHER,
        R_PPC64_TPREL16_HIGHERA,
        R_PPC64_TPREL16_HIGHEST,
        R_PPC64_TPREL16_HIGHESTA,
        R_PPC64_DTPREL16_DS,
        R_PPC64_DTPREL16_LO_DS,
        R_PPC64_DTPREL16_HIGHER,
        R_PPC64_DTPREL16_HIGHERA,
        R_PPC64_DTPREL16_HIGHEST,
        R_PPC64_DTPREL16_HIGHESTA,
        R_PPC64_TLSGD,
        R_PPC64_TLSLD,
        R_PPC64_TOCSAVE,
        R_PPC64_ADDR16_HIGH,
        R_PPC64_ADDR16_HIGHA,
        R_PPC64_TPREL16_HIGH,
        R_PPC64_TPREL16_HIGHA,
        R_PPC64_DTPREL16_HIGH,
        R_PPC64_DTPREL16_HIGHA,
        R_PPC64_JMP_IREL,
        R_PPC64_IRELATIVE,
        R_PPC64_REL16,
        R_PPC64_REL16_LO,
        R_PPC64_REL16_HI,
        R_PPC64_REL16_HA,
    );
    static FLAGS_R_AARCH64: &[Flag<u32>] = &flags!(
        R_AARCH64_NONE,
        R_AARCH64_P32_ABS32,
        R_AARCH64_P32_COPY,
        R_AARCH64_P32_GLOB_DAT,
        R_AARCH64_P32_JUMP_SLOT,
        R_AARCH64_P32_RELATIVE,
        R_AARCH64_P32_TLS_DTPMOD,
        R_AARCH64_P32_TLS_DTPREL,
        R_AARCH64_P32_TLS_TPREL,
        R_AARCH64_P32_TLSDESC,
        R_AARCH64_P32_IRELATIVE,
        R_AARCH64_ABS64,
        R_AARCH64_ABS32,
        R_AARCH64_ABS16,
        R_AARCH64_PREL64,
        R_AARCH64_PREL32,
        R_AARCH64_PREL16,
        R_AARCH64_MOVW_UABS_G0,
        R_AARCH64_MOVW_UABS_G0_NC,
        R_AARCH64_MOVW_UABS_G1,
        R_AARCH64_MOVW_UABS_G1_NC,
        R_AARCH64_MOVW_UABS_G2,
        R_AARCH64_MOVW_UABS_G2_NC,
        R_AARCH64_MOVW_UABS_G3,
        R_AARCH64_MOVW_SABS_G0,
        R_AARCH64_MOVW_SABS_G1,
        R_AARCH64_MOVW_SABS_G2,
        R_AARCH64_LD_PREL_LO19,
        R_AARCH64_ADR_PREL_LO21,
        R_AARCH64_ADR_PREL_PG_HI21,
        R_AARCH64_ADR_PREL_PG_HI21_NC,
        R_AARCH64_ADD_ABS_LO12_NC,
        R_AARCH64_LDST8_ABS_LO12_NC,
        R_AARCH64_TSTBR14,
        R_AARCH64_CONDBR19,
        R_AARCH64_JUMP26,
        R_AARCH64_CALL26,
        R_AARCH64_LDST16_ABS_LO12_NC,
        R_AARCH64_LDST32_ABS_LO12_NC,
        R_AARCH64_LDST64_ABS_LO12_NC,
        R_AARCH64_MOVW_PREL_G0,
        R_AARCH64_MOVW_PREL_G0_NC,
        R_AARCH64_MOVW_PREL_G1,
        R_AARCH64_MOVW_PREL_G1_NC,
        R_AARCH64_MOVW_PREL_G2,
        R_AARCH64_MOVW_PREL_G2_NC,
        R_AARCH64_MOVW_PREL_G3,
        R_AARCH64_LDST128_ABS_LO12_NC,
        R_AARCH64_MOVW_GOTOFF_G0,
        R_AARCH64_MOVW_GOTOFF_G0_NC,
        R_AARCH64_MOVW_GOTOFF_G1,
        R_AARCH64_MOVW_GOTOFF_G1_NC,
        R_AARCH64_MOVW_GOTOFF_G2,
        R_AARCH64_MOVW_GOTOFF_G2_NC,
        R_AARCH64_MOVW_GOTOFF_G3,
        R_AARCH64_GOTREL64,
        R_AARCH64_GOTREL32,
        R_AARCH64_GOT_LD_PREL19,
        R_AARCH64_LD64_GOTOFF_LO15,
        R_AARCH64_ADR_GOT_PAGE,
        R_AARCH64_LD64_GOT_LO12_NC,
        R_AARCH64_LD64_GOTPAGE_LO15,
        R_AARCH64_TLSGD_ADR_PREL21,
        R_AARCH64_TLSGD_ADR_PAGE21,
        R_AARCH64_TLSGD_ADD_LO12_NC,
        R_AARCH64_TLSGD_MOVW_G1,
        R_AARCH64_TLSGD_MOVW_G0_NC,
        R_AARCH64_TLSLD_ADR_PREL21,
        R_AARCH64_TLSLD_ADR_PAGE21,
        R_AARCH64_TLSLD_ADD_LO12_NC,
        R_AARCH64_TLSLD_MOVW_G1,
        R_AARCH64_TLSLD_MOVW_G0_NC,
        R_AARCH64_TLSLD_LD_PREL19,
        R_AARCH64_TLSLD_MOVW_DTPREL_G2,
        R_AARCH64_TLSLD_MOVW_DTPREL_G1,
        R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC,
        R_AARCH64_TLSLD_MOVW_DTPREL_G0,
        R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC,
        R_AARCH64_TLSLD_ADD_DTPREL_HI12,
        R_AARCH64_TLSLD_ADD_DTPREL_LO12,
        R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC,
        R_AARCH64_TLSLD_LDST8_DTPREL_LO12,
        R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC,
        R_AARCH64_TLSLD_LDST16_DTPREL_LO12,
        R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC,
        R_AARCH64_TLSLD_LDST32_DTPREL_LO12,
        R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC,
        R_AARCH64_TLSLD_LDST64_DTPREL_LO12,
        R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC,
        R_AARCH64_TLSIE_MOVW_GOTTPREL_G1,
        R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC,
        R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21,
        R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC,
        R_AARCH64_TLSIE_LD_GOTTPREL_PREL19,
        R_AARCH64_TLSLE_MOVW_TPREL_G2,
        R_AARCH64_TLSLE_MOVW_TPREL_G1,
        R_AARCH64_TLSLE_MOVW_TPREL_G1_NC,
        R_AARCH64_TLSLE_MOVW_TPREL_G0,
        R_AARCH64_TLSLE_MOVW_TPREL_G0_NC,
        R_AARCH64_TLSLE_ADD_TPREL_HI12,
        R_AARCH64_TLSLE_ADD_TPREL_LO12,
        R_AARCH64_TLSLE_ADD_TPREL_LO12_NC,
        R_AARCH64_TLSLE_LDST8_TPREL_LO12,
        R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC,
        R_AARCH64_TLSLE_LDST16_TPREL_LO12,
        R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC,
        R_AARCH64_TLSLE_LDST32_TPREL_LO12,
        R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC,
        R_AARCH64_TLSLE_LDST64_TPREL_LO12,
        R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC,
        R_AARCH64_TLSDESC_LD_PREL19,
        R_AARCH64_TLSDESC_ADR_PREL21,
        R_AARCH64_TLSDESC_ADR_PAGE21,
        R_AARCH64_TLSDESC_LD64_LO12,
        R_AARCH64_TLSDESC_ADD_LO12,
        R_AARCH64_TLSDESC_OFF_G1,
        R_AARCH64_TLSDESC_OFF_G0_NC,
        R_AARCH64_TLSDESC_LDR,
        R_AARCH64_TLSDESC_ADD,
        R_AARCH64_TLSDESC_CALL,
        R_AARCH64_TLSLE_LDST128_TPREL_LO12,
        R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC,
        R_AARCH64_TLSLD_LDST128_DTPREL_LO12,
        R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC,
        R_AARCH64_COPY,
        R_AARCH64_GLOB_DAT,
        R_AARCH64_JUMP_SLOT,
        R_AARCH64_RELATIVE,
        R_AARCH64_TLS_DTPMOD,
        R_AARCH64_TLS_DTPREL,
        R_AARCH64_TLS_TPREL,
        R_AARCH64_TLSDESC,
        R_AARCH64_IRELATIVE,
    );
    static FLAGS_R_ARM: &[Flag<u32>] = &flags!(
        R_ARM_NONE,
        R_ARM_PC24,
        R_ARM_ABS32,
        R_ARM_REL32,
        R_ARM_PC13,
        R_ARM_ABS16,
        R_ARM_ABS12,
        R_ARM_THM_ABS5,
        R_ARM_ABS8,
        R_ARM_SBREL32,
        R_ARM_THM_PC22,
        R_ARM_THM_PC8,
        R_ARM_AMP_VCALL9,
        R_ARM_SWI24,
        R_ARM_TLS_DESC,
        R_ARM_THM_SWI8,
        R_ARM_XPC25,
        R_ARM_THM_XPC22,
        R_ARM_TLS_DTPMOD32,
        R_ARM_TLS_DTPOFF32,
        R_ARM_TLS_TPOFF32,
        R_ARM_COPY,
        R_ARM_GLOB_DAT,
        R_ARM_JUMP_SLOT,
        R_ARM_RELATIVE,
        R_ARM_GOTOFF,
        R_ARM_GOTPC,
        R_ARM_GOT32,
        R_ARM_PLT32,
        R_ARM_CALL,
        R_ARM_JUMP24,
        R_ARM_THM_JUMP24,
        R_ARM_BASE_ABS,
        R_ARM_ALU_PCREL_7_0,
        R_ARM_ALU_PCREL_15_8,
        R_ARM_ALU_PCREL_23_15,
        R_ARM_LDR_SBREL_11_0,
        R_ARM_ALU_SBREL_19_12,
        R_ARM_ALU_SBREL_27_20,
        R_ARM_TARGET1,
        R_ARM_SBREL31,
        R_ARM_V4BX,
        R_ARM_TARGET2,
        R_ARM_PREL31,
        R_ARM_MOVW_ABS_NC,
        R_ARM_MOVT_ABS,
        R_ARM_MOVW_PREL_NC,
        R_ARM_MOVT_PREL,
        R_ARM_THM_MOVW_ABS_NC,
        R_ARM_THM_MOVT_ABS,
        R_ARM_THM_MOVW_PREL_NC,
        R_ARM_THM_MOVT_PREL,
        R_ARM_THM_JUMP19,
        R_ARM_THM_JUMP6,
        R_ARM_THM_ALU_PREL_11_0,
        R_ARM_THM_PC12,
        R_ARM_ABS32_NOI,
        R_ARM_REL32_NOI,
        R_ARM_ALU_PC_G0_NC,
        R_ARM_ALU_PC_G0,
        R_ARM_ALU_PC_G1_NC,
        R_ARM_ALU_PC_G1,
        R_ARM_ALU_PC_G2,
        R_ARM_LDR_PC_G1,
        R_ARM_LDR_PC_G2,
        R_ARM_LDRS_PC_G0,
        R_ARM_LDRS_PC_G1,
        R_ARM_LDRS_PC_G2,
        R_ARM_LDC_PC_G0,
        R_ARM_LDC_PC_G1,
        R_ARM_LDC_PC_G2,
        R_ARM_ALU_SB_G0_NC,
        R_ARM_ALU_SB_G0,
        R_ARM_ALU_SB_G1_NC,
        R_ARM_ALU_SB_G1,
        R_ARM_ALU_SB_G2,
        R_ARM_LDR_SB_G0,
        R_ARM_LDR_SB_G1,
        R_ARM_LDR_SB_G2,
        R_ARM_LDRS_SB_G0,
        R_ARM_LDRS_SB_G1,
        R_ARM_LDRS_SB_G2,
        R_ARM_LDC_SB_G0,
        R_ARM_LDC_SB_G1,
        R_ARM_LDC_SB_G2,
        R_ARM_MOVW_BREL_NC,
        R_ARM_MOVT_BREL,
        R_ARM_MOVW_BREL,
        R_ARM_THM_MOVW_BREL_NC,
        R_ARM_THM_MOVT_BREL,
        R_ARM_THM_MOVW_BREL,
        R_ARM_TLS_GOTDESC,
        R_ARM_TLS_CALL,
        R_ARM_TLS_DESCSEQ,
        R_ARM_THM_TLS_CALL,
        R_ARM_PLT32_ABS,
        R_ARM_GOT_ABS,
        R_ARM_GOT_PREL,
        R_ARM_GOT_BREL12,
        R_ARM_GOTOFF12,
        R_ARM_GOTRELAX,
        R_ARM_GNU_VTENTRY,
        R_ARM_GNU_VTINHERIT,
        R_ARM_THM_PC11,
        R_ARM_THM_PC9,
        R_ARM_TLS_GD32,
        R_ARM_TLS_LDM32,
        R_ARM_TLS_LDO32,
        R_ARM_TLS_IE32,
        R_ARM_TLS_LE32,
        R_ARM_TLS_LDO12,
        R_ARM_TLS_LE12,
        R_ARM_TLS_IE12GP,
        R_ARM_ME_TOO,
        R_ARM_THM_TLS_DESCSEQ,
        R_ARM_THM_TLS_DESCSEQ16,
        R_ARM_THM_TLS_DESCSEQ32,
        R_ARM_THM_GOT_BREL12,
        R_ARM_IRELATIVE,
        R_ARM_RXPC25,
        R_ARM_RSBREL32,
        R_ARM_THM_RPC22,
        R_ARM_RREL32,
        R_ARM_RABS22,
        R_ARM_RPC24,
        R_ARM_RBASE,
    );
    static FLAGS_R_CKCORE: &[Flag<u32>] = &flags!(
        R_CKCORE_NONE,
        R_CKCORE_ADDR32,
        R_CKCORE_PCRELIMM8BY4,
        R_CKCORE_PCRELIMM11BY2,
        R_CKCORE_PCREL32,
        R_CKCORE_PCRELJSR_IMM11BY2,
        R_CKCORE_RELATIVE,
        R_CKCORE_COPY,
        R_CKCORE_GLOB_DAT,
        R_CKCORE_JUMP_SLOT,
        R_CKCORE_GOTOFF,
        R_CKCORE_GOTPC,
        R_CKCORE_GOT32,
        R_CKCORE_PLT32,
        R_CKCORE_ADDRGOT,
        R_CKCORE_ADDRPLT,
        R_CKCORE_PCREL_IMM26BY2,
        R_CKCORE_PCREL_IMM16BY2,
        R_CKCORE_PCREL_IMM16BY4,
        R_CKCORE_PCREL_IMM10BY2,
        R_CKCORE_PCREL_IMM10BY4,
        R_CKCORE_ADDR_HI16,
        R_CKCORE_ADDR_LO16,
        R_CKCORE_GOTPC_HI16,
        R_CKCORE_GOTPC_LO16,
        R_CKCORE_GOTOFF_HI16,
        R_CKCORE_GOTOFF_LO16,
        R_CKCORE_GOT12,
        R_CKCORE_GOT_HI16,
        R_CKCORE_GOT_LO16,
        R_CKCORE_PLT12,
        R_CKCORE_PLT_HI16,
        R_CKCORE_PLT_LO16,
        R_CKCORE_ADDRGOT_HI16,
        R_CKCORE_ADDRGOT_LO16,
        R_CKCORE_ADDRPLT_HI16,
        R_CKCORE_ADDRPLT_LO16,
        R_CKCORE_PCREL_JSR_IMM26BY2,
        R_CKCORE_TOFFSET_LO16,
        R_CKCORE_DOFFSET_LO16,
        R_CKCORE_PCREL_IMM18BY2,
        R_CKCORE_DOFFSET_IMM18,
        R_CKCORE_DOFFSET_IMM18BY2,
        R_CKCORE_DOFFSET_IMM18BY4,
        R_CKCORE_GOT_IMM18BY4,
        R_CKCORE_PLT_IMM18BY4,
        R_CKCORE_PCREL_IMM7BY4,
        R_CKCORE_TLS_LE32,
        R_CKCORE_TLS_IE32,
        R_CKCORE_TLS_GD32,
        R_CKCORE_TLS_LDM32,
        R_CKCORE_TLS_LDO32,
        R_CKCORE_TLS_DTPMOD32,
        R_CKCORE_TLS_DTPOFF32,
        R_CKCORE_TLS_TPOFF32,
    );
    static FLAGS_R_IA64: &[Flag<u32>] = &flags!(
        R_IA64_NONE,
        R_IA64_IMM14,
        R_IA64_IMM22,
        R_IA64_IMM64,
        R_IA64_DIR32MSB,
        R_IA64_DIR32LSB,
        R_IA64_DIR64MSB,
        R_IA64_DIR64LSB,
        R_IA64_GPREL22,
        R_IA64_GPREL64I,
        R_IA64_GPREL32MSB,
        R_IA64_GPREL32LSB,
        R_IA64_GPREL64MSB,
        R_IA64_GPREL64LSB,
        R_IA64_LTOFF22,
        R_IA64_LTOFF64I,
        R_IA64_PLTOFF22,
        R_IA64_PLTOFF64I,
        R_IA64_PLTOFF64MSB,
        R_IA64_PLTOFF64LSB,
        R_IA64_FPTR64I,
        R_IA64_FPTR32MSB,
        R_IA64_FPTR32LSB,
        R_IA64_FPTR64MSB,
        R_IA64_FPTR64LSB,
        R_IA64_PCREL60B,
        R_IA64_PCREL21B,
        R_IA64_PCREL21M,
        R_IA64_PCREL21F,
        R_IA64_PCREL32MSB,
        R_IA64_PCREL32LSB,
        R_IA64_PCREL64MSB,
        R_IA64_PCREL64LSB,
        R_IA64_LTOFF_FPTR22,
        R_IA64_LTOFF_FPTR64I,
        R_IA64_LTOFF_FPTR32MSB,
        R_IA64_LTOFF_FPTR32LSB,
        R_IA64_LTOFF_FPTR64MSB,
        R_IA64_LTOFF_FPTR64LSB,
        R_IA64_SEGREL32MSB,
        R_IA64_SEGREL32LSB,
        R_IA64_SEGREL64MSB,
        R_IA64_SEGREL64LSB,
        R_IA64_SECREL32MSB,
        R_IA64_SECREL32LSB,
        R_IA64_SECREL64MSB,
        R_IA64_SECREL64LSB,
        R_IA64_REL32MSB,
        R_IA64_REL32LSB,
        R_IA64_REL64MSB,
        R_IA64_REL64LSB,
        R_IA64_LTV32MSB,
        R_IA64_LTV32LSB,
        R_IA64_LTV64MSB,
        R_IA64_LTV64LSB,
        R_IA64_PCREL21BI,
        R_IA64_PCREL22,
        R_IA64_PCREL64I,
        R_IA64_IPLTMSB,
        R_IA64_IPLTLSB,
        R_IA64_COPY,
        R_IA64_SUB,
        R_IA64_LTOFF22X,
        R_IA64_LDXMOV,
        R_IA64_TPREL14,
        R_IA64_TPREL22,
        R_IA64_TPREL64I,
        R_IA64_TPREL64MSB,
        R_IA64_TPREL64LSB,
        R_IA64_LTOFF_TPREL22,
        R_IA64_DTPMOD64MSB,
        R_IA64_DTPMOD64LSB,
        R_IA64_LTOFF_DTPMOD22,
        R_IA64_DTPREL14,
        R_IA64_DTPREL22,
        R_IA64_DTPREL64I,
        R_IA64_DTPREL32MSB,
        R_IA64_DTPREL32LSB,
        R_IA64_DTPREL64MSB,
        R_IA64_DTPREL64LSB,
        R_IA64_LTOFF_DTPREL22,
    );
    static FLAGS_R_SH: &[Flag<u32>] = &flags!(
        R_SH_NONE,
        R_SH_DIR32,
        R_SH_REL32,
        R_SH_DIR8WPN,
        R_SH_IND12W,
        R_SH_DIR8WPL,
        R_SH_DIR8WPZ,
        R_SH_DIR8BP,
        R_SH_DIR8W,
        R_SH_DIR8L,
        R_SH_SWITCH16,
        R_SH_SWITCH32,
        R_SH_USES,
        R_SH_COUNT,
        R_SH_ALIGN,
        R_SH_CODE,
        R_SH_DATA,
        R_SH_LABEL,
        R_SH_SWITCH8,
        R_SH_GNU_VTINHERIT,
        R_SH_GNU_VTENTRY,
        R_SH_TLS_GD_32,
        R_SH_TLS_LD_32,
        R_SH_TLS_LDO_32,
        R_SH_TLS_IE_32,
        R_SH_TLS_LE_32,
        R_SH_TLS_DTPMOD32,
        R_SH_TLS_DTPOFF32,
        R_SH_TLS_TPOFF32,
        R_SH_GOT32,
        R_SH_PLT32,
        R_SH_COPY,
        R_SH_GLOB_DAT,
        R_SH_JMP_SLOT,
        R_SH_RELATIVE,
        R_SH_GOTOFF,
        R_SH_GOTPC,
    );
    static FLAGS_R_390: &[Flag<u32>] = &flags!(
        R_390_NONE,
        R_390_8,
        R_390_12,
        R_390_16,
        R_390_32,
        R_390_PC32,
        R_390_GOT12,
        R_390_GOT32,
        R_390_PLT32,
        R_390_COPY,
        R_390_GLOB_DAT,
        R_390_JMP_SLOT,
        R_390_RELATIVE,
        R_390_GOTOFF32,
        R_390_GOTPC,
        R_390_GOT16,
        R_390_PC16,
        R_390_PC16DBL,
        R_390_PLT16DBL,
        R_390_PC32DBL,
        R_390_PLT32DBL,
        R_390_GOTPCDBL,
        R_390_64,
        R_390_PC64,
        R_390_GOT64,
        R_390_PLT64,
        R_390_GOTENT,
        R_390_GOTOFF16,
        R_390_GOTOFF64,
        R_390_GOTPLT12,
        R_390_GOTPLT16,
        R_390_GOTPLT32,
        R_390_GOTPLT64,
        R_390_GOTPLTENT,
        R_390_PLTOFF16,
        R_390_PLTOFF32,
        R_390_PLTOFF64,
        R_390_TLS_LOAD,
        R_390_TLS_GDCALL,
        R_390_TLS_LDCALL,
        R_390_TLS_GD32,
        R_390_TLS_GD64,
        R_390_TLS_GOTIE12,
        R_390_TLS_GOTIE32,
        R_390_TLS_GOTIE64,
        R_390_TLS_LDM32,
        R_390_TLS_LDM64,
        R_390_TLS_IE32,
        R_390_TLS_IE64,
        R_390_TLS_IEENT,
        R_390_TLS_LE32,
        R_390_TLS_LE64,
        R_390_TLS_LDO32,
        R_390_TLS_LDO64,
        R_390_TLS_DTPMOD,
        R_390_TLS_DTPOFF,
        R_390_TLS_TPOFF,
        R_390_20,
        R_390_GOT20,
        R_390_GOTPLT20,
        R_390_TLS_GOTIE20,
        R_390_IRELATIVE,
    );
    static FLAGS_R_CRIS: &[Flag<u32>] = &flags!(
        R_CRIS_NONE,
        R_CRIS_8,
        R_CRIS_16,
        R_CRIS_32,
        R_CRIS_8_PCREL,
        R_CRIS_16_PCREL,
        R_CRIS_32_PCREL,
        R_CRIS_GNU_VTINHERIT,
        R_CRIS_GNU_VTENTRY,
        R_CRIS_COPY,
        R_CRIS_GLOB_DAT,
        R_CRIS_JUMP_SLOT,
        R_CRIS_RELATIVE,
        R_CRIS_16_GOT,
        R_CRIS_32_GOT,
        R_CRIS_16_GOTPLT,
        R_CRIS_32_GOTPLT,
        R_CRIS_32_GOTREL,
        R_CRIS_32_PLT_GOTREL,
        R_CRIS_32_PLT_PCREL,
    );
    static FLAGS_R_X86_64: &[Flag<u32>] = &flags!(
        R_X86_64_NONE,
        R_X86_64_64,
        R_X86_64_PC32,
        R_X86_64_GOT32,
        R_X86_64_PLT32,
        R_X86_64_COPY,
        R_X86_64_GLOB_DAT,
        R_X86_64_JUMP_SLOT,
        R_X86_64_RELATIVE,
        R_X86_64_GOTPCREL,
        R_X86_64_32,
        R_X86_64_32S,
        R_X86_64_16,
        R_X86_64_PC16,
        R_X86_64_8,
        R_X86_64_PC8,
        R_X86_64_DTPMOD64,
        R_X86_64_DTPOFF64,
        R_X86_64_TPOFF64,
        R_X86_64_TLSGD,
        R_X86_64_TLSLD,
        R_X86_64_DTPOFF32,
        R_X86_64_GOTTPOFF,
        R_X86_64_TPOFF32,
        R_X86_64_PC64,
        R_X86_64_GOTOFF64,
        R_X86_64_GOTPC32,
        R_X86_64_GOT64,
        R_X86_64_GOTPCREL64,
        R_X86_64_GOTPC64,
        R_X86_64_GOTPLT64,
        R_X86_64_PLTOFF64,
        R_X86_64_SIZE32,
        R_X86_64_SIZE64,
        R_X86_64_GOTPC32_TLSDESC,
        R_X86_64_TLSDESC_CALL,
        R_X86_64_TLSDESC,
        R_X86_64_IRELATIVE,
        R_X86_64_RELATIVE64,
        R_X86_64_GOTPCRELX,
        R_X86_64_REX_GOTPCRELX,
    );
    static FLAGS_R_MN10300: &[Flag<u32>] = &flags!(
        R_MN10300_NONE,
        R_MN10300_32,
        R_MN10300_16,
        R_MN10300_8,
        R_MN10300_PCREL32,
        R_MN10300_PCREL16,
        R_MN10300_PCREL8,
        R_MN10300_GNU_VTINHERIT,
        R_MN10300_GNU_VTENTRY,
        R_MN10300_24,
        R_MN10300_GOTPC32,
        R_MN10300_GOTPC16,
        R_MN10300_GOTOFF32,
        R_MN10300_GOTOFF24,
        R_MN10300_GOTOFF16,
        R_MN10300_PLT32,
        R_MN10300_PLT16,
        R_MN10300_GOT32,
        R_MN10300_GOT24,
        R_MN10300_GOT16,
        R_MN10300_COPY,
        R_MN10300_GLOB_DAT,
        R_MN10300_JMP_SLOT,
        R_MN10300_RELATIVE,
        R_MN10300_TLS_GD,
        R_MN10300_TLS_LD,
        R_MN10300_TLS_LDO,
        R_MN10300_TLS_GOTIE,
        R_MN10300_TLS_IE,
        R_MN10300_TLS_LE,
        R_MN10300_TLS_DTPMOD,
        R_MN10300_TLS_DTPOFF,
        R_MN10300_TLS_TPOFF,
        R_MN10300_SYM_DIFF,
        R_MN10300_ALIGN,
    );
    static FLAGS_R_M32R: &[Flag<u32>] = &flags!(
        R_M32R_NONE,
        R_M32R_16,
        R_M32R_32,
        R_M32R_24,
        R_M32R_10_PCREL,
        R_M32R_18_PCREL,
        R_M32R_26_PCREL,
        R_M32R_HI16_ULO,
        R_M32R_HI16_SLO,
        R_M32R_LO16,
        R_M32R_SDA16,
        R_M32R_GNU_VTINHERIT,
        R_M32R_GNU_VTENTRY,
        R_M32R_16_RELA,
        R_M32R_32_RELA,
        R_M32R_24_RELA,
        R_M32R_10_PCREL_RELA,
        R_M32R_18_PCREL_RELA,
        R_M32R_26_PCREL_RELA,
        R_M32R_HI16_ULO_RELA,
        R_M32R_HI16_SLO_RELA,
        R_M32R_LO16_RELA,
        R_M32R_SDA16_RELA,
        R_M32R_RELA_GNU_VTINHERIT,
        R_M32R_RELA_GNU_VTENTRY,
        R_M32R_REL32,
        R_M32R_GOT24,
        R_M32R_26_PLTREL,
        R_M32R_COPY,
        R_M32R_GLOB_DAT,
        R_M32R_JMP_SLOT,
        R_M32R_RELATIVE,
        R_M32R_GOTOFF,
        R_M32R_GOTPC24,
        R_M32R_GOT16_HI_ULO,
        R_M32R_GOT16_HI_SLO,
        R_M32R_GOT16_LO,
        R_M32R_GOTPC_HI_ULO,
        R_M32R_GOTPC_HI_SLO,
        R_M32R_GOTPC_LO,
        R_M32R_GOTOFF_HI_ULO,
        R_M32R_GOTOFF_HI_SLO,
        R_M32R_GOTOFF_LO,
        R_M32R_NUM,
    );
    static FLAGS_R_MICROBLAZE: &[Flag<u32>] = &flags!(
        R_MICROBLAZE_NONE,
        R_MICROBLAZE_32,
        R_MICROBLAZE_32_PCREL,
        R_MICROBLAZE_64_PCREL,
        R_MICROBLAZE_32_PCREL_LO,
        R_MICROBLAZE_64,
        R_MICROBLAZE_32_LO,
        R_MICROBLAZE_SRO32,
        R_MICROBLAZE_SRW32,
        R_MICROBLAZE_64_NONE,
        R_MICROBLAZE_32_SYM_OP_SYM,
        R_MICROBLAZE_GNU_VTINHERIT,
        R_MICROBLAZE_GNU_VTENTRY,
        R_MICROBLAZE_GOTPC_64,
        R_MICROBLAZE_GOT_64,
        R_MICROBLAZE_PLT_64,
        R_MICROBLAZE_REL,
        R_MICROBLAZE_JUMP_SLOT,
        R_MICROBLAZE_GLOB_DAT,
        R_MICROBLAZE_GOTOFF_64,
        R_MICROBLAZE_GOTOFF_32,
        R_MICROBLAZE_COPY,
        R_MICROBLAZE_TLS,
        R_MICROBLAZE_TLSGD,
        R_MICROBLAZE_TLSLD,
        R_MICROBLAZE_TLSDTPMOD32,
        R_MICROBLAZE_TLSDTPREL32,
        R_MICROBLAZE_TLSDTPREL64,
        R_MICROBLAZE_TLSGOTTPREL32,
        R_MICROBLAZE_TLSTPREL32,
    );
    static FLAGS_R_NIOS2: &[Flag<u32>] = &flags!(
        R_NIOS2_NONE,
        R_NIOS2_S16,
        R_NIOS2_U16,
        R_NIOS2_PCREL16,
        R_NIOS2_CALL26,
        R_NIOS2_IMM5,
        R_NIOS2_CACHE_OPX,
        R_NIOS2_IMM6,
        R_NIOS2_IMM8,
        R_NIOS2_HI16,
        R_NIOS2_LO16,
        R_NIOS2_HIADJ16,
        R_NIOS2_BFD_RELOC_32,
        R_NIOS2_BFD_RELOC_16,
        R_NIOS2_BFD_RELOC_8,
        R_NIOS2_GPREL,
        R_NIOS2_GNU_VTINHERIT,
        R_NIOS2_GNU_VTENTRY,
        R_NIOS2_UJMP,
        R_NIOS2_CJMP,
        R_NIOS2_CALLR,
        R_NIOS2_ALIGN,
        R_NIOS2_GOT16,
        R_NIOS2_CALL16,
        R_NIOS2_GOTOFF_LO,
        R_NIOS2_GOTOFF_HA,
        R_NIOS2_PCREL_LO,
        R_NIOS2_PCREL_HA,
        R_NIOS2_TLS_GD16,
        R_NIOS2_TLS_LDM16,
        R_NIOS2_TLS_LDO16,
        R_NIOS2_TLS_IE16,
        R_NIOS2_TLS_LE16,
        R_NIOS2_TLS_DTPMOD,
        R_NIOS2_TLS_DTPREL,
        R_NIOS2_TLS_TPREL,
        R_NIOS2_COPY,
        R_NIOS2_GLOB_DAT,
        R_NIOS2_JUMP_SLOT,
        R_NIOS2_RELATIVE,
        R_NIOS2_GOTOFF,
        R_NIOS2_CALL26_NOAT,
        R_NIOS2_GOT_LO,
        R_NIOS2_GOT_HA,
        R_NIOS2_CALL_LO,
        R_NIOS2_CALL_HA,
    );
    static FLAGS_R_TILEPRO: &[Flag<u32>] = &flags!(
        R_TILEPRO_NONE,
        R_TILEPRO_32,
        R_TILEPRO_16,
        R_TILEPRO_8,
        R_TILEPRO_32_PCREL,
        R_TILEPRO_16_PCREL,
        R_TILEPRO_8_PCREL,
        R_TILEPRO_LO16,
        R_TILEPRO_HI16,
        R_TILEPRO_HA16,
        R_TILEPRO_COPY,
        R_TILEPRO_GLOB_DAT,
        R_TILEPRO_JMP_SLOT,
        R_TILEPRO_RELATIVE,
        R_TILEPRO_BROFF_X1,
        R_TILEPRO_JOFFLONG_X1,
        R_TILEPRO_JOFFLONG_X1_PLT,
        R_TILEPRO_IMM8_X0,
        R_TILEPRO_IMM8_Y0,
        R_TILEPRO_IMM8_X1,
        R_TILEPRO_IMM8_Y1,
        R_TILEPRO_MT_IMM15_X1,
        R_TILEPRO_MF_IMM15_X1,
        R_TILEPRO_IMM16_X0,
        R_TILEPRO_IMM16_X1,
        R_TILEPRO_IMM16_X0_LO,
        R_TILEPRO_IMM16_X1_LO,
        R_TILEPRO_IMM16_X0_HI,
        R_TILEPRO_IMM16_X1_HI,
        R_TILEPRO_IMM16_X0_HA,
        R_TILEPRO_IMM16_X1_HA,
        R_TILEPRO_IMM16_X0_PCREL,
        R_TILEPRO_IMM16_X1_PCREL,
        R_TILEPRO_IMM16_X0_LO_PCREL,
        R_TILEPRO_IMM16_X1_LO_PCREL,
        R_TILEPRO_IMM16_X0_HI_PCREL,
        R_TILEPRO_IMM16_X1_HI_PCREL,
        R_TILEPRO_IMM16_X0_HA_PCREL,
        R_TILEPRO_IMM16_X1_HA_PCREL,
        R_TILEPRO_IMM16_X0_GOT,
        R_TILEPRO_IMM16_X1_GOT,
        R_TILEPRO_IMM16_X0_GOT_LO,
        R_TILEPRO_IMM16_X1_GOT_LO,
        R_TILEPRO_IMM16_X0_GOT_HI,
        R_TILEPRO_IMM16_X1_GOT_HI,
        R_TILEPRO_IMM16_X0_GOT_HA,
        R_TILEPRO_IMM16_X1_GOT_HA,
        R_TILEPRO_MMSTART_X0,
        R_TILEPRO_MMEND_X0,
        R_TILEPRO_MMSTART_X1,
        R_TILEPRO_MMEND_X1,
        R_TILEPRO_SHAMT_X0,
        R_TILEPRO_SHAMT_X1,
        R_TILEPRO_SHAMT_Y0,
        R_TILEPRO_SHAMT_Y1,
        R_TILEPRO_DEST_IMM8_X1,
        R_TILEPRO_TLS_GD_CALL,
        R_TILEPRO_IMM8_X0_TLS_GD_ADD,
        R_TILEPRO_IMM8_X1_TLS_GD_ADD,
        R_TILEPRO_IMM8_Y0_TLS_GD_ADD,
        R_TILEPRO_IMM8_Y1_TLS_GD_ADD,
        R_TILEPRO_TLS_IE_LOAD,
        R_TILEPRO_IMM16_X0_TLS_GD,
        R_TILEPRO_IMM16_X1_TLS_GD,
        R_TILEPRO_IMM16_X0_TLS_GD_LO,
        R_TILEPRO_IMM16_X1_TLS_GD_LO,
        R_TILEPRO_IMM16_X0_TLS_GD_HI,
        R_TILEPRO_IMM16_X1_TLS_GD_HI,
        R_TILEPRO_IMM16_X0_TLS_GD_HA,
        R_TILEPRO_IMM16_X1_TLS_GD_HA,
        R_TILEPRO_IMM16_X0_TLS_IE,
        R_TILEPRO_IMM16_X1_TLS_IE,
        R_TILEPRO_IMM16_X0_TLS_IE_LO,
        R_TILEPRO_IMM16_X1_TLS_IE_LO,
        R_TILEPRO_IMM16_X0_TLS_IE_HI,
        R_TILEPRO_IMM16_X1_TLS_IE_HI,
        R_TILEPRO_IMM16_X0_TLS_IE_HA,
        R_TILEPRO_IMM16_X1_TLS_IE_HA,
        R_TILEPRO_TLS_DTPMOD32,
        R_TILEPRO_TLS_DTPOFF32,
        R_TILEPRO_TLS_TPOFF32,
        R_TILEPRO_IMM16_X0_TLS_LE,
        R_TILEPRO_IMM16_X1_TLS_LE,
        R_TILEPRO_IMM16_X0_TLS_LE_LO,
        R_TILEPRO_IMM16_X1_TLS_LE_LO,
        R_TILEPRO_IMM16_X0_TLS_LE_HI,
        R_TILEPRO_IMM16_X1_TLS_LE_HI,
        R_TILEPRO_IMM16_X0_TLS_LE_HA,
        R_TILEPRO_IMM16_X1_TLS_LE_HA,
        R_TILEPRO_GNU_VTINHERIT,
        R_TILEPRO_GNU_VTENTRY,
    );
    static FLAGS_R_TILEGX: &[Flag<u32>] = &flags!(
        R_TILEGX_NONE,
        R_TILEGX_64,
        R_TILEGX_32,
        R_TILEGX_16,
        R_TILEGX_8,
        R_TILEGX_64_PCREL,
        R_TILEGX_32_PCREL,
        R_TILEGX_16_PCREL,
        R_TILEGX_8_PCREL,
        R_TILEGX_HW0,
        R_TILEGX_HW1,
        R_TILEGX_HW2,
        R_TILEGX_HW3,
        R_TILEGX_HW0_LAST,
        R_TILEGX_HW1_LAST,
        R_TILEGX_HW2_LAST,
        R_TILEGX_COPY,
        R_TILEGX_GLOB_DAT,
        R_TILEGX_JMP_SLOT,
        R_TILEGX_RELATIVE,
        R_TILEGX_BROFF_X1,
        R_TILEGX_JUMPOFF_X1,
        R_TILEGX_JUMPOFF_X1_PLT,
        R_TILEGX_IMM8_X0,
        R_TILEGX_IMM8_Y0,
        R_TILEGX_IMM8_X1,
        R_TILEGX_IMM8_Y1,
        R_TILEGX_DEST_IMM8_X1,
        R_TILEGX_MT_IMM14_X1,
        R_TILEGX_MF_IMM14_X1,
        R_TILEGX_MMSTART_X0,
        R_TILEGX_MMEND_X0,
        R_TILEGX_SHAMT_X0,
        R_TILEGX_SHAMT_X1,
        R_TILEGX_SHAMT_Y0,
        R_TILEGX_SHAMT_Y1,
        R_TILEGX_IMM16_X0_HW0,
        R_TILEGX_IMM16_X1_HW0,
        R_TILEGX_IMM16_X0_HW1,
        R_TILEGX_IMM16_X1_HW1,
        R_TILEGX_IMM16_X0_HW2,
        R_TILEGX_IMM16_X1_HW2,
        R_TILEGX_IMM16_X0_HW3,
        R_TILEGX_IMM16_X1_HW3,
        R_TILEGX_IMM16_X0_HW0_LAST,
        R_TILEGX_IMM16_X1_HW0_LAST,
        R_TILEGX_IMM16_X0_HW1_LAST,
        R_TILEGX_IMM16_X1_HW1_LAST,
        R_TILEGX_IMM16_X0_HW2_LAST,
        R_TILEGX_IMM16_X1_HW2_LAST,
        R_TILEGX_IMM16_X0_HW0_PCREL,
        R_TILEGX_IMM16_X1_HW0_PCREL,
        R_TILEGX_IMM16_X0_HW1_PCREL,
        R_TILEGX_IMM16_X1_HW1_PCREL,
        R_TILEGX_IMM16_X0_HW2_PCREL,
        R_TILEGX_IMM16_X1_HW2_PCREL,
        R_TILEGX_IMM16_X0_HW3_PCREL,
        R_TILEGX_IMM16_X1_HW3_PCREL,
        R_TILEGX_IMM16_X0_HW0_LAST_PCREL,
        R_TILEGX_IMM16_X1_HW0_LAST_PCREL,
        R_TILEGX_IMM16_X0_HW1_LAST_PCREL,
        R_TILEGX_IMM16_X1_HW1_LAST_PCREL,
        R_TILEGX_IMM16_X0_HW2_LAST_PCREL,
        R_TILEGX_IMM16_X1_HW2_LAST_PCREL,
        R_TILEGX_IMM16_X0_HW0_GOT,
        R_TILEGX_IMM16_X1_HW0_GOT,
        R_TILEGX_IMM16_X0_HW0_PLT_PCREL,
        R_TILEGX_IMM16_X1_HW0_PLT_PCREL,
        R_TILEGX_IMM16_X0_HW1_PLT_PCREL,
        R_TILEGX_IMM16_X1_HW1_PLT_PCREL,
        R_TILEGX_IMM16_X0_HW2_PLT_PCREL,
        R_TILEGX_IMM16_X1_HW2_PLT_PCREL,
        R_TILEGX_IMM16_X0_HW0_LAST_GOT,
        R_TILEGX_IMM16_X1_HW0_LAST_GOT,
        R_TILEGX_IMM16_X0_HW1_LAST_GOT,
        R_TILEGX_IMM16_X1_HW1_LAST_GOT,
        R_TILEGX_IMM16_X0_HW3_PLT_PCREL,
        R_TILEGX_IMM16_X1_HW3_PLT_PCREL,
        R_TILEGX_IMM16_X0_HW0_TLS_GD,
        R_TILEGX_IMM16_X1_HW0_TLS_GD,
        R_TILEGX_IMM16_X0_HW0_TLS_LE,
        R_TILEGX_IMM16_X1_HW0_TLS_LE,
        R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
        R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
        R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
        R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
        R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,
        R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,
        R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,
        R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,
        R_TILEGX_IMM16_X0_HW0_TLS_IE,
        R_TILEGX_IMM16_X1_HW0_TLS_IE,
        R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL,
        R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL,
        R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL,
        R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL,
        R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL,
        R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL,
        R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE,
        R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE,
        R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE,
        R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE,
        R_TILEGX_TLS_DTPMOD64,
        R_TILEGX_TLS_DTPOFF64,
        R_TILEGX_TLS_TPOFF64,
        R_TILEGX_TLS_DTPMOD32,
        R_TILEGX_TLS_DTPOFF32,
        R_TILEGX_TLS_TPOFF32,
        R_TILEGX_TLS_GD_CALL,
        R_TILEGX_IMM8_X0_TLS_GD_ADD,
        R_TILEGX_IMM8_X1_TLS_GD_ADD,
        R_TILEGX_IMM8_Y0_TLS_GD_ADD,
        R_TILEGX_IMM8_Y1_TLS_GD_ADD,
        R_TILEGX_TLS_IE_LOAD,
        R_TILEGX_IMM8_X0_TLS_ADD,
        R_TILEGX_IMM8_X1_TLS_ADD,
        R_TILEGX_IMM8_Y0_TLS_ADD,
        R_TILEGX_IMM8_Y1_TLS_ADD,
        R_TILEGX_GNU_VTINHERIT,
        R_TILEGX_GNU_VTENTRY,
    );
    static FLAGS_R_RISCV: &[Flag<u32>] = &flags!(
        R_RISCV_NONE,
        R_RISCV_32,
        R_RISCV_64,
        R_RISCV_RELATIVE,
        R_RISCV_COPY,
        R_RISCV_JUMP_SLOT,
        R_RISCV_TLS_DTPMOD32,
        R_RISCV_TLS_DTPMOD64,
        R_RISCV_TLS_DTPREL32,
        R_RISCV_TLS_DTPREL64,
        R_RISCV_TLS_TPREL32,
        R_RISCV_TLS_TPREL64,
        R_RISCV_BRANCH,
        R_RISCV_JAL,
        R_RISCV_CALL,
        R_RISCV_CALL_PLT,
        R_RISCV_GOT_HI20,
        R_RISCV_TLS_GOT_HI20,
        R_RISCV_TLS_GD_HI20,
        R_RISCV_PCREL_HI20,
        R_RISCV_PCREL_LO12_I,
        R_RISCV_PCREL_LO12_S,
        R_RISCV_HI20,
        R_RISCV_LO12_I,
        R_RISCV_LO12_S,
        R_RISCV_TPREL_HI20,
        R_RISCV_TPREL_LO12_I,
        R_RISCV_TPREL_LO12_S,
        R_RISCV_TPREL_ADD,
        R_RISCV_ADD8,
        R_RISCV_ADD16,
        R_RISCV_ADD32,
        R_RISCV_ADD64,
        R_RISCV_SUB8,
        R_RISCV_SUB16,
        R_RISCV_SUB32,
        R_RISCV_SUB64,
        R_RISCV_GNU_VTINHERIT,
        R_RISCV_GNU_VTENTRY,
        R_RISCV_ALIGN,
        R_RISCV_RVC_BRANCH,
        R_RISCV_RVC_JUMP,
        R_RISCV_RVC_LUI,
        R_RISCV_GPREL_I,
        R_RISCV_GPREL_S,
        R_RISCV_TPREL_I,
        R_RISCV_TPREL_S,
        R_RISCV_RELAX,
        R_RISCV_SUB6,
        R_RISCV_SET6,
        R_RISCV_SET8,
        R_RISCV_SET16,
        R_RISCV_SET32,
        R_RISCV_32_PCREL,
    );
    static FLAGS_R_BPF: &[Flag<u32>] = &flags!(R_BPF_NONE, R_BPF_64_64, R_BPF_64_32);
    static FLAGS_R_METAG: &[Flag<u32>] = &flags!(
        R_METAG_HIADDR16,
        R_METAG_LOADDR16,
        R_METAG_ADDR32,
        R_METAG_NONE,
        R_METAG_RELBRANCH,
        R_METAG_GETSETOFF,
        R_METAG_REG32OP1,
        R_METAG_REG32OP2,
        R_METAG_REG32OP3,
        R_METAG_REG16OP1,
        R_METAG_REG16OP2,
        R_METAG_REG16OP3,
        R_METAG_REG32OP4,
        R_METAG_HIOG,
        R_METAG_LOOG,
        R_METAG_REL8,
        R_METAG_REL16,
        R_METAG_GNU_VTINHERIT,
        R_METAG_GNU_VTENTRY,
        R_METAG_HI16_GOTOFF,
        R_METAG_LO16_GOTOFF,
        R_METAG_GETSET_GOTOFF,
        R_METAG_GETSET_GOT,
        R_METAG_HI16_GOTPC,
        R_METAG_LO16_GOTPC,
        R_METAG_HI16_PLT,
        R_METAG_LO16_PLT,
        R_METAG_RELBRANCH_PLT,
        R_METAG_GOTOFF,
        R_METAG_PLT,
        R_METAG_COPY,
        R_METAG_JMP_SLOT,
        R_METAG_RELATIVE,
        R_METAG_GLOB_DAT,
        R_METAG_TLS_GD,
        R_METAG_TLS_LDM,
        R_METAG_TLS_LDO_HI16,
        R_METAG_TLS_LDO_LO16,
        R_METAG_TLS_LDO,
        R_METAG_TLS_IE,
        R_METAG_TLS_IENONPIC,
        R_METAG_TLS_IENONPIC_HI16,
        R_METAG_TLS_IENONPIC_LO16,
        R_METAG_TLS_TPOFF,
        R_METAG_TLS_DTPMOD,
        R_METAG_TLS_DTPOFF,
        R_METAG_TLS_LE,
        R_METAG_TLS_LE_HI16,
        R_METAG_TLS_LE_LO16,
    );
    static FLAGS_R_NDS32: &[Flag<u32>] = &flags!(
        R_NDS32_NONE,
        R_NDS32_32_RELA,
        R_NDS32_COPY,
        R_NDS32_GLOB_DAT,
        R_NDS32_JMP_SLOT,
        R_NDS32_RELATIVE,
        R_NDS32_TLS_TPOFF,
        R_NDS32_TLS_DESC,
    );
    static FLAGS_NT_CORE: &[Flag<u32>] = &flags!(
        NT_PRSTATUS,
        NT_PRFPREG,
        NT_FPREGSET,
        NT_PRPSINFO,
        NT_PRXREG,
        NT_TASKSTRUCT,
        NT_PLATFORM,
        NT_AUXV,
        NT_GWINDOWS,
        NT_ASRS,
        NT_PSTATUS,
        NT_PSINFO,
        NT_PRCRED,
        NT_UTSNAME,
        NT_LWPSTATUS,
        NT_LWPSINFO,
        NT_PRFPXREG,
        NT_SIGINFO,
        NT_FILE,
        NT_PRXFPREG,
        NT_PPC_VMX,
        NT_PPC_SPE,
        NT_PPC_VSX,
        NT_PPC_TAR,
        NT_PPC_PPR,
        NT_PPC_DSCR,
        NT_PPC_EBB,
        NT_PPC_PMU,
        NT_PPC_TM_CGPR,
        NT_PPC_TM_CFPR,
        NT_PPC_TM_CVMX,
        NT_PPC_TM_CVSX,
        NT_PPC_TM_SPR,
        NT_PPC_TM_CTAR,
        NT_PPC_TM_CPPR,
        NT_PPC_TM_CDSCR,
        NT_PPC_PKEY,
        NT_386_TLS,
        NT_386_IOPERM,
        NT_X86_XSTATE,
        NT_S390_HIGH_GPRS,
        NT_S390_TIMER,
        NT_S390_TODCMP,
        NT_S390_TODPREG,
        NT_S390_CTRS,
        NT_S390_PREFIX,
        NT_S390_LAST_BREAK,
        NT_S390_SYSTEM_CALL,
        NT_S390_TDB,
        NT_S390_VXRS_LOW,
        NT_S390_VXRS_HIGH,
        NT_S390_GS_CB,
        NT_S390_GS_BC,
        NT_S390_RI_CB,
        NT_ARM_VFP,
        NT_ARM_TLS,
        NT_ARM_HW_BREAK,
        NT_ARM_HW_WATCH,
        NT_ARM_SYSTEM_CALL,
        NT_ARM_SVE,
        NT_VMCOREDD,
        NT_MIPS_DSP,
        NT_MIPS_FP_MODE,
    );
    static FLAGS_NT_SOLARIS: &[Flag<u32>] = &flags!(NT_SOLARIS_PAGESIZE_HINT);
    static FLAGS_NT_GNU: &[Flag<u32>] = &flags!(
        NT_GNU_ABI_TAG,
        NT_GNU_HWCAP,
        NT_GNU_BUILD_ID,
        NT_GNU_GOLD_VERSION,
        NT_GNU_PROPERTY_TYPE_0,
    );
    static FLAGS_GRP: &[Flag<u32>] = &flags!(GRP_COMDAT);
    static FLAGS_DT: &[Flag<u32>] = &flags!(
        DT_NULL,
        DT_NEEDED,
        DT_PLTRELSZ,
        DT_PLTGOT,
        DT_HASH,
        DT_STRTAB,
        DT_SYMTAB,
        DT_RELA,
        DT_RELASZ,
        DT_RELAENT,
        DT_STRSZ,
        DT_SYMENT,
        DT_INIT,
        DT_FINI,
        DT_SONAME,
        DT_RPATH,
        DT_SYMBOLIC,
        DT_REL,
        DT_RELSZ,
        DT_RELENT,
        DT_PLTREL,
        DT_DEBUG,
        DT_TEXTREL,
        DT_JMPREL,
        DT_BIND_NOW,
        DT_INIT_ARRAY,
        DT_FINI_ARRAY,
        DT_INIT_ARRAYSZ,
        DT_FINI_ARRAYSZ,
        DT_RUNPATH,
        DT_FLAGS,
        DT_PREINIT_ARRAY,
        DT_PREINIT_ARRAYSZ,
        DT_SYMTAB_SHNDX,
        DT_GNU_PRELINKED,
        DT_GNU_CONFLICTSZ,
        DT_GNU_LIBLISTSZ,
        DT_CHECKSUM,
        DT_PLTPADSZ,
        DT_MOVEENT,
        DT_MOVESZ,
        DT_FEATURE_1,
        DT_POSFLAG_1,
        DT_SYMINSZ,
        DT_SYMINENT,
        DT_GNU_HASH,
        DT_TLSDESC_PLT,
        DT_TLSDESC_GOT,
        DT_GNU_CONFLICT,
        DT_GNU_LIBLIST,
        DT_CONFIG,
        DT_DEPAUDIT,
        DT_AUDIT,
        DT_PLTPAD,
        DT_MOVETAB,
        DT_SYMINFO,
        DT_VERSYM,
        DT_RELACOUNT,
        DT_RELCOUNT,
        DT_FLAGS_1,
        DT_VERDEF,
        DT_VERDEFNUM,
        DT_VERNEED,
        DT_VERNEEDNUM,
        DT_AUXILIARY,
        DT_FILTER,
    );
    static FLAGS_DT_SPARC: &[Flag<u32>] = &flags!(DT_SPARC_REGISTER);
    static FLAGS_DT_MIPS: &[Flag<u32>] = &flags!(
        DT_MIPS_RLD_VERSION,
        DT_MIPS_TIME_STAMP,
        DT_MIPS_ICHECKSUM,
        DT_MIPS_IVERSION,
        DT_MIPS_FLAGS,
        DT_MIPS_BASE_ADDRESS,
        DT_MIPS_MSYM,
        DT_MIPS_CONFLICT,
        DT_MIPS_LIBLIST,
        DT_MIPS_LOCAL_GOTNO,
        DT_MIPS_CONFLICTNO,
        DT_MIPS_LIBLISTNO,
        DT_MIPS_SYMTABNO,
        DT_MIPS_UNREFEXTNO,
        DT_MIPS_GOTSYM,
        DT_MIPS_HIPAGENO,
        DT_MIPS_RLD_MAP,
        DT_MIPS_DELTA_CLASS,
        DT_MIPS_DELTA_CLASS_NO,
        DT_MIPS_DELTA_INSTANCE,
        DT_MIPS_DELTA_INSTANCE_NO,
        DT_MIPS_DELTA_RELOC,
        DT_MIPS_DELTA_RELOC_NO,
        DT_MIPS_DELTA_SYM,
        DT_MIPS_DELTA_SYM_NO,
        DT_MIPS_DELTA_CLASSSYM,
        DT_MIPS_DELTA_CLASSSYM_NO,
        DT_MIPS_CXX_FLAGS,
        DT_MIPS_PIXIE_INIT,
        DT_MIPS_SYMBOL_LIB,
        DT_MIPS_LOCALPAGE_GOTIDX,
        DT_MIPS_LOCAL_GOTIDX,
        DT_MIPS_HIDDEN_GOTIDX,
        DT_MIPS_PROTECTED_GOTIDX,
        DT_MIPS_OPTIONS,
        DT_MIPS_INTERFACE,
        DT_MIPS_DYNSTR_ALIGN,
        DT_MIPS_INTERFACE_SIZE,
        DT_MIPS_RLD_TEXT_RESOLVE_ADDR,
        DT_MIPS_PERF_SUFFIX,
        DT_MIPS_COMPACT_SIZE,
        DT_MIPS_GP_VALUE,
        DT_MIPS_AUX_DYNAMIC,
        DT_MIPS_PLTGOT,
        DT_MIPS_RWPLT,
        DT_MIPS_RLD_MAP_REL,
    );
    static FLAGS_DT_ALPHA: &[Flag<u32>] = &flags!(DT_ALPHA_PLTRO);
    static FLAGS_DT_PPC: &[Flag<u32>] = &flags!(DT_PPC_GOT, DT_PPC_OPT);
    static FLAGS_DT_PPC64: &[Flag<u32>] =
        &flags!(DT_PPC64_GLINK, DT_PPC64_OPD, DT_PPC64_OPDSZ, DT_PPC64_OPT);
    static FLAGS_DT_IA_64: &[Flag<u32>] = &flags!(DT_IA_64_PLT_RESERVE);
    static FLAGS_DT_NIOS2: &[Flag<u32>] = &flags!(DT_NIOS2_GP);
    static FLAGS_DF: &[Flag<u32>] = &flags!(
        DF_ORIGIN,
        DF_SYMBOLIC,
        DF_TEXTREL,
        DF_BIND_NOW,
        DF_STATIC_TLS,
    );
    static FLAGS_DF_1: &[Flag<u32>] = &flags!(
        DF_1_NOW,
        DF_1_GLOBAL,
        DF_1_GROUP,
        DF_1_NODELETE,
        DF_1_LOADFLTR,
        DF_1_INITFIRST,
        DF_1_NOOPEN,
        DF_1_ORIGIN,
        DF_1_DIRECT,
        DF_1_TRANS,
        DF_1_INTERPOSE,
        DF_1_NODEFLIB,
        DF_1_NODUMP,
        DF_1_CONFALT,
        DF_1_ENDFILTEE,
        DF_1_DISPRELDNE,
        DF_1_DISPRELPND,
        DF_1_NODIRECT,
        DF_1_IGNMULDEF,
        DF_1_NOKSYMS,
        DF_1_NOHDR,
        DF_1_EDITED,
        DF_1_NORELOC,
        DF_1_SYMINTPOSE,
        DF_1_GLOBAUDIT,
        DF_1_SINGLETON,
        DF_1_STUB,
        DF_1_PIE,
    );
}

mod macho {
    use super::*;
    use object::macho::*;
    use object::read::macho::*;
    use object::BigEndian;

    pub(super) fn print_macho_fat32(p: &mut Printer<impl Write>, data: &[u8]) {
        if let Ok(arches) = FatHeader::parse_arch32(data) {
            println!("Format: Mach-O Fat 32-bit");
            print_fat_header(p, data);
            for arch in arches {
                print_fat_arch(p, arch);
            }
            for arch in arches {
                if let Ok(data) = arch.data(data) {
                    p.blank();
                    print_object(p, data);
                }
            }
        }
    }

    pub(super) fn print_macho_fat64(p: &mut Printer<impl Write>, data: &[u8]) {
        if let Ok(arches) = FatHeader::parse_arch64(data) {
            println!("Format: Mach-O Fat 64-bit");
            print_fat_header(p, data);
            for arch in arches {
                print_fat_arch(p, arch);
            }
            for arch in arches {
                if let Ok(data) = arch.data(data) {
                    p.blank();
                    print_object(p, data);
                }
            }
        }
    }

    pub(super) fn print_fat_header(p: &mut Printer<impl Write>, data: &[u8]) {
        if let Ok(header) = FatHeader::parse(data) {
            p.group("FatHeader", |p| {
                p.field_hex("Magic", header.magic.get(BigEndian));
                p.field("NumberOfFatArch", header.nfat_arch.get(BigEndian));
            });
        }
    }

    pub(super) fn print_fat_arch<Arch: FatArch>(p: &mut Printer<impl Write>, arch: &Arch) {
        p.group("FatArch", |p| {
            print_cputype(p, arch.cputype(), arch.cpusubtype());
            p.field_hex("Offset", arch.offset().into());
            p.field_hex("Size", arch.size().into());
            p.field("Align", arch.align());
        });
    }

    pub(super) fn print_macho32(p: &mut Printer<impl Write>, data: &[u8]) {
        if let Ok(header) = MachHeader32::parse(data) {
            println!("Format: Mach-O 32-bit");
            print_macho(p, header, data);
        }
    }

    pub(super) fn print_macho64(p: &mut Printer<impl Write>, data: &[u8]) {
        if let Ok(header) = MachHeader64::parse(data) {
            println!("Format: Mach-O 64-bit");
            print_macho(p, header, data);
        }
    }

    #[derive(Default)]
    struct MachState {
        section_index: usize,
    }

    fn print_macho<Mach: MachHeader<Endian = Endianness>>(
        p: &mut Printer<impl Write>,
        header: &Mach,
        data: &[u8],
    ) {
        if let Ok(endian) = header.endian() {
            let mut state = MachState::default();
            print_mach_header(p, endian, header);
            if let Ok(mut commands) = header.load_commands(endian, data) {
                while let Ok(Some(command)) = commands.next() {
                    print_load_command(p, endian, data, header, command, &mut state);
                }
            }
        }
    }

    fn print_mach_header<Mach: MachHeader>(
        p: &mut Printer<impl Write>,
        endian: Mach::Endian,
        header: &Mach,
    ) {
        p.group("MachHeader", |p| {
            p.field_hex("Magic", header.magic().to_be());
            print_cputype(p, header.cputype(endian), header.cpusubtype(endian));
            p.field_enum("FileType", header.filetype(endian), FLAGS_MH_FILETYPE);
            p.field("NumberOfCmds", header.ncmds(endian));
            p.field_hex("SizeOfCmds", header.sizeofcmds(endian));
            p.field_enum("Flags", header.flags(endian), FLAGS_MH);
        });
    }

    fn print_load_command<Mach: MachHeader>(
        p: &mut Printer<impl Write>,
        endian: Mach::Endian,
        data: &[u8],
        header: &Mach,
        command: LoadCommandData<Mach::Endian>,
        state: &mut MachState,
    ) {
        if let Ok(variant) = command.variant() {
            match variant {
                LoadCommandVariant::Segment32(segment, section_data) => {
                    print_segment(
                        p,
                        endian,
                        data,
                        header.cputype(endian),
                        segment,
                        section_data,
                        state,
                    );
                }
                LoadCommandVariant::Segment64(segment, section_data) => {
                    print_segment(
                        p,
                        endian,
                        data,
                        header.cputype(endian),
                        segment,
                        section_data,
                        state,
                    );
                }
                LoadCommandVariant::Symtab(symtab) => {
                    print_symtab::<Mach, _>(p, endian, data, symtab);
                }
                LoadCommandVariant::Thread(x, _thread_data) => {
                    p.group("ThreadCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        // TODO: thread_data
                    });
                }
                LoadCommandVariant::Dysymtab(x) => {
                    p.group("DysymtabCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        // TODO: dump the tables these are all pointing to
                        p.field("IndexOfLocalSymbols", x.ilocalsym.get(endian));
                        p.field("NumberOfLocalSymbols", x.nlocalsym.get(endian));
                        p.field("IndexOfExternallyDefinedSymbols", x.iextdefsym.get(endian));
                        p.field("NumberOfExternallyDefinedSymbols", x.nextdefsym.get(endian));
                        p.field("IndexOfUndefinedSymbols", x.iundefsym.get(endian));
                        p.field("NumberOfUndefinedSymbols", x.nundefsym.get(endian));
                        p.field_hex("TocOffset", x.tocoff.get(endian));
                        p.field("NumberOfTocEntries", x.ntoc.get(endian));
                        p.field_hex("ModuleTableOffset", x.modtaboff.get(endian));
                        p.field("NumberOfModuleTableEntries", x.nmodtab.get(endian));
                        p.field_hex("ExternalRefSymbolOffset", x.extrefsymoff.get(endian));
                        p.field("NumberOfExternalRefSymbols", x.nextrefsyms.get(endian));
                        p.field_hex("IndirectSymbolOffset", x.indirectsymoff.get(endian));
                        p.field("NumberOfIndirectSymbols", x.nindirectsyms.get(endian));
                        p.field_hex("ExternalRelocationOffset", x.extreloff.get(endian));
                        p.field("NumberOfExternalRelocations", x.nextrel.get(endian));
                        p.field_hex("LocalRelocationOffset", x.locreloff.get(endian));
                        p.field("NumberOfLocalRelocations", x.nlocrel.get(endian));
                    });
                }
                LoadCommandVariant::Dylib(x) | LoadCommandVariant::IdDylib(x) => {
                    p.group("DylibCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.group("Dylib", |p| {
                            p.field_string(
                                "Name",
                                x.dylib.name.offset.get(endian),
                                command.string(endian, x.dylib.name).ok(),
                            );
                            p.field("Timestamp", x.dylib.timestamp.get(endian));
                            p.field_hex("CurrentVersion", x.dylib.current_version.get(endian));
                            p.field_hex(
                                "CompatibilityVersion",
                                x.dylib.compatibility_version.get(endian),
                            );
                        });
                    });
                }
                LoadCommandVariant::LoadDylinker(x)
                | LoadCommandVariant::IdDylinker(x)
                | LoadCommandVariant::DyldEnvironment(x) => {
                    p.group("DylinkerCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_string(
                            "Name",
                            x.name.offset.get(endian),
                            command.string(endian, x.name).ok(),
                        );
                    });
                }
                LoadCommandVariant::PreboundDylib(x) => {
                    p.group("PreboundDylibCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_string(
                            "Name",
                            x.name.offset.get(endian),
                            command.string(endian, x.name).ok(),
                        );
                        p.field("NumberOfModules", x.nmodules.get(endian));
                        // TODO: display bit vector
                        p.field_hex("LinkedModules", x.linked_modules.offset.get(endian));
                    });
                }
                LoadCommandVariant::Routines32(x) => {
                    p.group("RoutinesCommand32", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("InitAddress", x.init_address.get(endian));
                        p.field_hex("InitModule", x.init_module.get(endian));
                        p.field_hex("Reserved1", x.reserved1.get(endian));
                        p.field_hex("Reserved2", x.reserved2.get(endian));
                        p.field_hex("Reserved3", x.reserved3.get(endian));
                        p.field_hex("Reserved4", x.reserved4.get(endian));
                        p.field_hex("Reserved5", x.reserved5.get(endian));
                        p.field_hex("Reserved6", x.reserved6.get(endian));
                    });
                }
                LoadCommandVariant::Routines64(x) => {
                    p.group("RoutinesCommand64", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("InitAddress", x.init_address.get(endian));
                        p.field_hex("InitModule", x.init_module.get(endian));
                        p.field_hex("Reserved1", x.reserved1.get(endian));
                        p.field_hex("Reserved2", x.reserved2.get(endian));
                        p.field_hex("Reserved3", x.reserved3.get(endian));
                        p.field_hex("Reserved4", x.reserved4.get(endian));
                        p.field_hex("Reserved5", x.reserved5.get(endian));
                        p.field_hex("Reserved6", x.reserved6.get(endian));
                    });
                }
                LoadCommandVariant::SubFramework(x) => {
                    p.group("SubFrameworkCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_string(
                            "Umbrella",
                            x.umbrella.offset.get(endian),
                            command.string(endian, x.umbrella).ok(),
                        );
                    });
                }
                LoadCommandVariant::SubUmbrella(x) => {
                    p.group("SubUmbrellaCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_string(
                            "SubUmbrella",
                            x.sub_umbrella.offset.get(endian),
                            command.string(endian, x.sub_umbrella).ok(),
                        );
                    });
                }
                LoadCommandVariant::SubClient(x) => {
                    p.group("SubClientCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_string(
                            "Client",
                            x.client.offset.get(endian),
                            command.string(endian, x.client).ok(),
                        );
                    });
                }
                LoadCommandVariant::SubLibrary(x) => {
                    p.group("SubLibraryCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_string(
                            "SubLibrary",
                            x.sub_library.offset.get(endian),
                            command.string(endian, x.sub_library).ok(),
                        );
                    });
                }
                LoadCommandVariant::TwolevelHints(x) => {
                    p.group("TwolevelHintsCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("Offset", x.offset.get(endian));
                        p.field_hex("NumberOfHints", x.nhints.get(endian));
                        // TODO: display hints
                    });
                }
                LoadCommandVariant::PrebindCksum(x) => {
                    p.group("PrebindCksumCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("Cksum", x.cksum.get(endian));
                    });
                }
                LoadCommandVariant::Uuid(x) => {
                    p.group("UuidCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field("Uuid", format!("{:X?}", x.uuid));
                    });
                }
                LoadCommandVariant::Rpath(x) => {
                    p.group("RpathCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_string(
                            "Path",
                            x.path.offset.get(endian),
                            command.string(endian, x.path).ok(),
                        );
                    });
                }
                LoadCommandVariant::LinkeditData(x) => {
                    p.group("LinkeditDataCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("DataOffset", x.dataoff.get(endian));
                        p.field_hex("DataSize", x.datasize.get(endian));
                    });
                }
                LoadCommandVariant::EncryptionInfo32(x) => {
                    p.group("EncryptionInfoCommand32", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("CryptOffset", x.cryptoff.get(endian));
                        p.field_hex("CryptSize", x.cryptsize.get(endian));
                        p.field_hex("CryptId", x.cryptid.get(endian));
                    });
                }
                LoadCommandVariant::EncryptionInfo64(x) => {
                    p.group("EncryptionInfoCommand64", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("CryptOffset", x.cryptoff.get(endian));
                        p.field_hex("CryptSize", x.cryptsize.get(endian));
                        p.field_hex("CryptId", x.cryptid.get(endian));
                        p.field_hex("Pad", x.pad.get(endian));
                    });
                }
                LoadCommandVariant::DyldInfo(x) => {
                    p.group("DyldInfoCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        // TODO: dump the tables these are all pointing to
                        p.field_hex("RebaseOffset", x.rebase_off.get(endian));
                        p.field_hex("RebaseSize", x.rebase_size.get(endian));
                        p.field_hex("BindOffset", x.bind_off.get(endian));
                        p.field_hex("BindSize", x.bind_size.get(endian));
                        p.field_hex("WeakBindOffset", x.weak_bind_off.get(endian));
                        p.field_hex("WeakBindSize", x.weak_bind_size.get(endian));
                        p.field_hex("LazyBindOffset", x.lazy_bind_off.get(endian));
                        p.field_hex("LazyBindSize", x.lazy_bind_size.get(endian));
                        p.field_hex("ExportOffset", x.export_off.get(endian));
                        p.field_hex("ExportSize", x.export_size.get(endian));
                    });
                }
                LoadCommandVariant::VersionMin(x) => {
                    p.group("VersionMinCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("Version", x.version.get(endian));
                        p.field_hex("Sdk", x.sdk.get(endian));
                    });
                }
                LoadCommandVariant::EntryPoint(x) => {
                    p.group("EntryPointCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("EntryOffset", x.entryoff.get(endian));
                        p.field_hex("StackSize", x.stacksize.get(endian));
                    });
                }
                LoadCommandVariant::SourceVersion(x) => {
                    p.group("SourceVersionCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("Version", x.version.get(endian));
                    });
                }
                LoadCommandVariant::LinkerOption(x) => {
                    p.group("LinkerOptionCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("Count", x.count.get(endian));
                        // TODO: dump strings
                    });
                }
                LoadCommandVariant::Note(x) => {
                    p.group("NoteCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        // TODO: string?
                        p.field("DataOwner", format!("{:X?}", x.data_owner));
                        p.field_hex("Offset", x.offset.get(endian));
                        p.field_hex("Size", x.size.get(endian));
                    });
                }
                LoadCommandVariant::BuildVersion(x) => {
                    p.group("BuildVersionCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_enum("Platform", x.platform.get(endian), FLAGS_PLATFORM);
                        p.field_hex("MinOs", x.minos.get(endian));
                        p.field_hex("Sdk", x.sdk.get(endian));
                        p.field_hex("NumberOfTools", x.ntools.get(endian));
                        // TODO: dump tools
                    });
                }
                LoadCommandVariant::FilesetEntry(x) => {
                    p.group("FilesetEntryCommand", |p| {
                        p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
                        p.field_hex("CmdSize", x.cmdsize.get(endian));
                        p.field_hex("VmAddress", x.vmaddr.get(endian));
                        p.field_hex("FileOffset", x.fileoff.get(endian));
                        p.field_string(
                            "EntryId",
                            x.entry_id.offset.get(endian),
                            command.string(endian, x.entry_id).ok(),
                        );
                        p.field_hex("Reserved", x.reserved.get(endian));
                    });
                }
                LoadCommandVariant::Other => {
                    p.group("LoadCommand", |p| {
                        p.field_enum("Cmd", command.cmd(), FLAGS_LC);
                        p.field_hex("CmdSize", command.cmdsize());
                    });
                }
            }
        } else {
            p.group("LoadCommand", |p| {
                p.field_enum("Cmd", command.cmd(), FLAGS_LC);
                p.field_hex("CmdSize", command.cmdsize());
            });
        }
    }

    fn print_segment<S: Segment>(
        p: &mut Printer<impl Write>,
        endian: S::Endian,
        data: &[u8],
        cputype: u32,
        segment: &S,
        section_data: &[u8],
        state: &mut MachState,
    ) {
        p.group("SegmentCommand", |p| {
            p.field_enum("Cmd", segment.cmd(endian), FLAGS_LC);
            p.field_hex("CmdSize", segment.cmdsize(endian));
            p.field_inline_string("SegmentName", segment.name());
            p.field_hex("VmAddress", segment.vmaddr(endian).into());
            p.field_hex("VmSize", segment.vmsize(endian).into());
            p.field_hex("FileOffset", segment.fileoff(endian).into());
            p.field_hex("FileSize", segment.filesize(endian).into());
            p.field_hex("MaxProt", segment.maxprot(endian));
            p.flags(segment.maxprot(endian), 0, FLAGS_VM);
            p.field_hex("InitProt", segment.initprot(endian));
            p.flags(segment.initprot(endian), 0, FLAGS_VM);
            p.field("NumberOfSections", segment.nsects(endian));
            p.field_hex("Flags", segment.flags(endian));
            p.flags(segment.flags(endian), 0, FLAGS_SG);
            if let Ok(sections) = segment.sections(endian, section_data) {
                for section in sections {
                    print_section(p, endian, data, cputype, section, state);
                }
            }
        });
    }

    fn print_section<S: Section>(
        p: &mut Printer<impl Write>,
        endian: S::Endian,
        data: &[u8],
        cputype: u32,
        section: &S,
        state: &mut MachState,
    ) {
        p.group("Section", |p| {
            p.field("Index", state.section_index);
            state.section_index += 1;
            p.field_inline_string("SectionName", section.name());
            p.field_inline_string("SegmentName", section.segment_name());
            p.field_hex("Address", section.addr(endian).into());
            p.field_hex("Size", section.size(endian).into());
            p.field_hex("Offset", section.offset(endian));
            p.field_hex("Align", section.align(endian));
            p.field_hex("RelocationOffset", section.reloff(endian));
            p.field_hex("NumberOfRelocations", section.nreloc(endian));
            let flags = section.flags(endian);
            if flags & SECTION_TYPE == flags {
                p.field_enum("Flags", flags, FLAGS_S_TYPE);
            } else {
                p.field_hex("Flags", section.flags(endian));
                p.flags(flags, SECTION_TYPE, FLAGS_S_TYPE);
                p.flags(flags, 0, FLAGS_S_ATTR);
            }
            if let Ok(relocations) = section.relocations(endian, data) {
                let proc = match cputype {
                    CPU_TYPE_X86 => FLAGS_GENERIC_RELOC,
                    CPU_TYPE_X86_64 => FLAGS_X86_64_RELOC,
                    CPU_TYPE_ARM => FLAGS_ARM_RELOC,
                    CPU_TYPE_ARM64 | CPU_TYPE_ARM64_32 => FLAGS_ARM64_RELOC,
                    CPU_TYPE_POWERPC | CPU_TYPE_POWERPC64 => FLAGS_PPC_RELOC,
                    _ => &[],
                };
                for relocation in relocations {
                    if relocation.r_scattered(endian, cputype) {
                        let info = relocation.scattered_info(endian);
                        p.group("ScatteredRelocationInfo", |p| {
                            p.field_hex("Address", info.r_address);
                            p.field("PcRel", if info.r_pcrel { "yes" } else { "no" });
                            p.field("Length", info.r_length);
                            p.field_enum("Type", info.r_type, proc);
                            p.field_hex("Value", info.r_value);
                        });
                    } else {
                        let info = relocation.info(endian);
                        p.group("RelocationInfo", |p| {
                            p.field_hex("Address", info.r_address);
                            if info.r_extern {
                                // TODO: symbol name
                                p.field("Symbol", info.r_symbolnum);
                            } else {
                                p.field("Section", info.r_symbolnum);
                            }
                            p.field("PcRel", if info.r_pcrel { "yes" } else { "no" });
                            p.field("Length", info.r_length);
                            p.field("Extern", if info.r_extern { "yes" } else { "no" });
                            p.field_enum("Type", info.r_type, proc);
                        });
                    }
                }
            }
        });
    }

    fn print_symtab<Mach: MachHeader, W: Write>(
        p: &mut Printer<W>,
        endian: Mach::Endian,
        data: &[u8],
        symtab: &SymtabCommand<Mach::Endian>,
    ) {
        p.group("SymtabCommand", |p| {
            p.field_enum("Cmd", symtab.cmd.get(endian), FLAGS_LC);
            p.field_hex("CmdSize", symtab.cmdsize.get(endian));
            p.field_hex("SymbolOffset", symtab.symoff.get(endian));
            p.field_hex("NumberOfSymbols", symtab.nsyms.get(endian));
            p.field_hex("StringOffset", symtab.stroff.get(endian));
            p.field_hex("StringSize", symtab.strsize.get(endian));
            if let Ok(symbols) = symtab.symbols::<Mach, _>(endian, data) {
                for (index, nlist) in symbols.iter().enumerate() {
                    p.group("Nlist", |p| {
                        p.field("Index", index);
                        p.field_string(
                            "String",
                            nlist.n_strx(endian),
                            nlist.name(endian, symbols.strings()).ok(),
                        );
                        let n_type = nlist.n_type();
                        if nlist.is_stab() {
                            p.field_enum("Type", n_type, FLAGS_N_STAB);
                        } else if n_type & N_TYPE == n_type {
                            // Avoid an extra line if no flags.
                            p.field_enum("Type", n_type, FLAGS_N_TYPE);
                        } else {
                            p.field_hex("Type", n_type);
                            p.flags(n_type, N_TYPE, FLAGS_N_TYPE);
                            p.flags(n_type, 0, FLAGS_N_EXT);
                        }
                        p.field("Section", nlist.n_sect());
                        let n_desc = nlist.n_desc(endian);
                        p.field_hex("Desc", n_desc);
                        if nlist.is_undefined() {
                            p.flags(n_desc, REFERENCE_TYPE, FLAGS_REFERENCE);
                        }
                        if !nlist.is_stab() {
                            p.flags(n_desc, 0, FLAGS_N_DESC);
                        }
                        p.field_hex("Value", nlist.n_value(endian).into());
                    });
                }
            }
        });
    }

    fn print_cputype(p: &mut Printer<impl Write>, cputype: u32, cpusubtype: u32) {
        let proc = match cputype {
            CPU_TYPE_ANY => FLAGS_CPU_SUBTYPE_ANY,
            CPU_TYPE_VAX => FLAGS_CPU_SUBTYPE_VAX,
            CPU_TYPE_MC680X0 => FLAGS_CPU_SUBTYPE_MC680X0,
            CPU_TYPE_X86 => FLAGS_CPU_SUBTYPE_X86,
            CPU_TYPE_X86_64 => FLAGS_CPU_SUBTYPE_X86_64,
            CPU_TYPE_MIPS => FLAGS_CPU_SUBTYPE_MIPS,
            CPU_TYPE_MC98000 => FLAGS_CPU_SUBTYPE_MC98000,
            CPU_TYPE_HPPA => FLAGS_CPU_SUBTYPE_HPPA,
            CPU_TYPE_ARM => FLAGS_CPU_SUBTYPE_ARM,
            CPU_TYPE_ARM64 => FLAGS_CPU_SUBTYPE_ARM64,
            CPU_TYPE_ARM64_32 => FLAGS_CPU_SUBTYPE_ARM64_32,
            CPU_TYPE_MC88000 => FLAGS_CPU_SUBTYPE_MC88000,
            CPU_TYPE_SPARC => FLAGS_CPU_SUBTYPE_SPARC,
            CPU_TYPE_I860 => FLAGS_CPU_SUBTYPE_I860,
            CPU_TYPE_POWERPC | CPU_TYPE_POWERPC64 => FLAGS_CPU_SUBTYPE_POWERPC,
            _ => &[],
        };
        p.field_enum("CpuType", cputype, FLAGS_CPU_TYPE);
        p.field_hex("CpuSubtype", cpusubtype);
        p.flags(cpusubtype, !CPU_SUBTYPE_MASK, proc);
        p.flags(cpusubtype, 0, FLAGS_CPU_SUBTYPE);
    }

    static FLAGS_CPU_TYPE: &[Flag<u32>] = &flags!(
        CPU_TYPE_ANY,
        CPU_TYPE_VAX,
        CPU_TYPE_MC680X0,
        CPU_TYPE_X86,
        CPU_TYPE_X86_64,
        CPU_TYPE_MIPS,
        CPU_TYPE_MC98000,
        CPU_TYPE_HPPA,
        CPU_TYPE_ARM,
        CPU_TYPE_ARM64,
        CPU_TYPE_ARM64_32,
        CPU_TYPE_MC88000,
        CPU_TYPE_SPARC,
        CPU_TYPE_I860,
        CPU_TYPE_ALPHA,
        CPU_TYPE_POWERPC,
        CPU_TYPE_POWERPC64,
    );
    static FLAGS_CPU_SUBTYPE: &[Flag<u32>] = &flags!(CPU_SUBTYPE_LIB64);
    static FLAGS_CPU_SUBTYPE_ANY: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_MULTIPLE,
        CPU_SUBTYPE_LITTLE_ENDIAN,
        CPU_SUBTYPE_BIG_ENDIAN,
    );
    static FLAGS_CPU_SUBTYPE_VAX: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_VAX_ALL,
        CPU_SUBTYPE_VAX780,
        CPU_SUBTYPE_VAX785,
        CPU_SUBTYPE_VAX750,
        CPU_SUBTYPE_VAX730,
        CPU_SUBTYPE_UVAXI,
        CPU_SUBTYPE_UVAXII,
        CPU_SUBTYPE_VAX8200,
        CPU_SUBTYPE_VAX8500,
        CPU_SUBTYPE_VAX8600,
        CPU_SUBTYPE_VAX8650,
        CPU_SUBTYPE_VAX8800,
        CPU_SUBTYPE_UVAXIII,
    );
    static FLAGS_CPU_SUBTYPE_MC680X0: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_MC680X0_ALL,
        CPU_SUBTYPE_MC68040,
        CPU_SUBTYPE_MC68030_ONLY,
    );
    static FLAGS_CPU_SUBTYPE_X86: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_I386_ALL,
        CPU_SUBTYPE_386,
        CPU_SUBTYPE_486,
        CPU_SUBTYPE_486SX,
        CPU_SUBTYPE_586,
        CPU_SUBTYPE_PENT,
        CPU_SUBTYPE_PENTPRO,
        CPU_SUBTYPE_PENTII_M3,
        CPU_SUBTYPE_PENTII_M5,
        CPU_SUBTYPE_CELERON,
        CPU_SUBTYPE_CELERON_MOBILE,
        CPU_SUBTYPE_PENTIUM_3,
        CPU_SUBTYPE_PENTIUM_3_M,
        CPU_SUBTYPE_PENTIUM_3_XEON,
        CPU_SUBTYPE_PENTIUM_M,
        CPU_SUBTYPE_PENTIUM_4,
        CPU_SUBTYPE_PENTIUM_4_M,
        CPU_SUBTYPE_ITANIUM,
        CPU_SUBTYPE_ITANIUM_2,
        CPU_SUBTYPE_XEON,
        CPU_SUBTYPE_XEON_MP,
    );
    static FLAGS_CPU_SUBTYPE_X86_64: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_X86_64_ALL,
        CPU_SUBTYPE_X86_ARCH1,
        CPU_SUBTYPE_X86_64_H,
    );
    static FLAGS_CPU_SUBTYPE_MIPS: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_MIPS_ALL,
        CPU_SUBTYPE_MIPS_R2300,
        CPU_SUBTYPE_MIPS_R2600,
        CPU_SUBTYPE_MIPS_R2800,
        CPU_SUBTYPE_MIPS_R2000A,
        CPU_SUBTYPE_MIPS_R2000,
        CPU_SUBTYPE_MIPS_R3000A,
        CPU_SUBTYPE_MIPS_R3000,
    );
    static FLAGS_CPU_SUBTYPE_MC98000: &[Flag<u32>] =
        &flags!(CPU_SUBTYPE_MC98000_ALL, CPU_SUBTYPE_MC98601);
    static FLAGS_CPU_SUBTYPE_HPPA: &[Flag<u32>] =
        &flags!(CPU_SUBTYPE_HPPA_ALL, CPU_SUBTYPE_HPPA_7100LC);
    static FLAGS_CPU_SUBTYPE_MC88000: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_MC88000_ALL,
        CPU_SUBTYPE_MC88100,
        CPU_SUBTYPE_MC88110,
    );
    static FLAGS_CPU_SUBTYPE_SPARC: &[Flag<u32>] = &flags!(CPU_SUBTYPE_SPARC_ALL);
    static FLAGS_CPU_SUBTYPE_I860: &[Flag<u32>] =
        &flags!(CPU_SUBTYPE_I860_ALL, CPU_SUBTYPE_I860_860);
    static FLAGS_CPU_SUBTYPE_POWERPC: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_POWERPC_ALL,
        CPU_SUBTYPE_POWERPC_601,
        CPU_SUBTYPE_POWERPC_602,
        CPU_SUBTYPE_POWERPC_603,
        CPU_SUBTYPE_POWERPC_603E,
        CPU_SUBTYPE_POWERPC_603EV,
        CPU_SUBTYPE_POWERPC_604,
        CPU_SUBTYPE_POWERPC_604E,
        CPU_SUBTYPE_POWERPC_620,
        CPU_SUBTYPE_POWERPC_750,
        CPU_SUBTYPE_POWERPC_7400,
        CPU_SUBTYPE_POWERPC_7450,
        CPU_SUBTYPE_POWERPC_970,
    );
    static FLAGS_CPU_SUBTYPE_ARM: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_ARM_ALL,
        CPU_SUBTYPE_ARM_V4T,
        CPU_SUBTYPE_ARM_V6,
        CPU_SUBTYPE_ARM_V5TEJ,
        CPU_SUBTYPE_ARM_XSCALE,
        CPU_SUBTYPE_ARM_V7,
        CPU_SUBTYPE_ARM_V7F,
        CPU_SUBTYPE_ARM_V7S,
        CPU_SUBTYPE_ARM_V7K,
        CPU_SUBTYPE_ARM_V8,
        CPU_SUBTYPE_ARM_V6M,
        CPU_SUBTYPE_ARM_V7M,
        CPU_SUBTYPE_ARM_V7EM,
        CPU_SUBTYPE_ARM_V8M,
    );
    static FLAGS_CPU_SUBTYPE_ARM64: &[Flag<u32>] = &flags!(
        CPU_SUBTYPE_ARM64_ALL,
        CPU_SUBTYPE_ARM64_V8,
        CPU_SUBTYPE_ARM64E,
    );
    static FLAGS_CPU_SUBTYPE_ARM64_32: &[Flag<u32>] =
        &flags!(CPU_SUBTYPE_ARM64_32_ALL, CPU_SUBTYPE_ARM64_32_V8);
    static FLAGS_MH_FILETYPE: &[Flag<u32>] = &flags!(
        MH_OBJECT,
        MH_EXECUTE,
        MH_FVMLIB,
        MH_CORE,
        MH_PRELOAD,
        MH_DYLIB,
        MH_DYLINKER,
        MH_BUNDLE,
        MH_DYLIB_STUB,
        MH_DSYM,
        MH_KEXT_BUNDLE,
        MH_FILESET,
    );
    static FLAGS_MH: &[Flag<u32>] = &flags!(
        MH_NOUNDEFS,
        MH_INCRLINK,
        MH_DYLDLINK,
        MH_BINDATLOAD,
        MH_PREBOUND,
        MH_SPLIT_SEGS,
        MH_LAZY_INIT,
        MH_TWOLEVEL,
        MH_FORCE_FLAT,
        MH_NOMULTIDEFS,
        MH_NOFIXPREBINDING,
        MH_PREBINDABLE,
        MH_ALLMODSBOUND,
        MH_SUBSECTIONS_VIA_SYMBOLS,
        MH_CANONICAL,
        MH_WEAK_DEFINES,
        MH_BINDS_TO_WEAK,
        MH_ALLOW_STACK_EXECUTION,
        MH_ROOT_SAFE,
        MH_SETUID_SAFE,
        MH_NO_REEXPORTED_DYLIBS,
        MH_PIE,
        MH_DEAD_STRIPPABLE_DYLIB,
        MH_HAS_TLV_DESCRIPTORS,
        MH_NO_HEAP_EXECUTION,
        MH_APP_EXTENSION_SAFE,
        MH_NLIST_OUTOFSYNC_WITH_DYLDINFO,
        MH_SIM_SUPPORT,
        MH_DYLIB_IN_CACHE,
    );
    static FLAGS_LC: &[Flag<u32>] = &flags!(
        LC_SEGMENT,
        LC_SYMTAB,
        LC_SYMSEG,
        LC_THREAD,
        LC_UNIXTHREAD,
        LC_LOADFVMLIB,
        LC_IDFVMLIB,
        LC_IDENT,
        LC_FVMFILE,
        LC_PREPAGE,
        LC_DYSYMTAB,
        LC_LOAD_DYLIB,
        LC_ID_DYLIB,
        LC_LOAD_DYLINKER,
        LC_ID_DYLINKER,
        LC_PREBOUND_DYLIB,
        LC_ROUTINES,
        LC_SUB_FRAMEWORK,
        LC_SUB_UMBRELLA,
        LC_SUB_CLIENT,
        LC_SUB_LIBRARY,
        LC_TWOLEVEL_HINTS,
        LC_PREBIND_CKSUM,
        LC_LOAD_WEAK_DYLIB,
        LC_SEGMENT_64,
        LC_ROUTINES_64,
        LC_UUID,
        LC_RPATH,
        LC_CODE_SIGNATURE,
        LC_SEGMENT_SPLIT_INFO,
        LC_REEXPORT_DYLIB,
        LC_LAZY_LOAD_DYLIB,
        LC_ENCRYPTION_INFO,
        LC_DYLD_INFO,
        LC_DYLD_INFO_ONLY,
        LC_LOAD_UPWARD_DYLIB,
        LC_VERSION_MIN_MACOSX,
        LC_VERSION_MIN_IPHONEOS,
        LC_FUNCTION_STARTS,
        LC_DYLD_ENVIRONMENT,
        LC_MAIN,
        LC_DATA_IN_CODE,
        LC_SOURCE_VERSION,
        LC_DYLIB_CODE_SIGN_DRS,
        LC_ENCRYPTION_INFO_64,
        LC_LINKER_OPTION,
        LC_LINKER_OPTIMIZATION_HINT,
        LC_VERSION_MIN_TVOS,
        LC_VERSION_MIN_WATCHOS,
        LC_NOTE,
        LC_BUILD_VERSION,
        LC_DYLD_EXPORTS_TRIE,
        LC_DYLD_CHAINED_FIXUPS,
        LC_FILESET_ENTRY,
    );
    static FLAGS_VM: &[Flag<u32>] = &flags!(VM_PROT_READ, VM_PROT_WRITE, VM_PROT_EXECUTE);
    static FLAGS_SG: &[Flag<u32>] = &flags!(
        SG_HIGHVM,
        SG_FVMLIB,
        SG_NORELOC,
        SG_PROTECTED_VERSION_1,
        SG_READ_ONLY,
    );
    static FLAGS_S_TYPE: &[Flag<u32>] = &flags!(
        S_REGULAR,
        S_ZEROFILL,
        S_CSTRING_LITERALS,
        S_4BYTE_LITERALS,
        S_8BYTE_LITERALS,
        S_LITERAL_POINTERS,
        S_NON_LAZY_SYMBOL_POINTERS,
        S_LAZY_SYMBOL_POINTERS,
        S_SYMBOL_STUBS,
        S_MOD_INIT_FUNC_POINTERS,
        S_MOD_TERM_FUNC_POINTERS,
        S_COALESCED,
        S_GB_ZEROFILL,
        S_INTERPOSING,
        S_16BYTE_LITERALS,
        S_DTRACE_DOF,
        S_LAZY_DYLIB_SYMBOL_POINTERS,
        S_THREAD_LOCAL_REGULAR,
        S_THREAD_LOCAL_ZEROFILL,
        S_THREAD_LOCAL_VARIABLES,
        S_THREAD_LOCAL_VARIABLE_POINTERS,
        S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,
        S_INIT_FUNC_OFFSETS,
    );
    static FLAGS_S_ATTR: &[Flag<u32>] = &flags!(
        S_ATTR_PURE_INSTRUCTIONS,
        S_ATTR_NO_TOC,
        S_ATTR_STRIP_STATIC_SYMS,
        S_ATTR_NO_DEAD_STRIP,
        S_ATTR_LIVE_SUPPORT,
        S_ATTR_SELF_MODIFYING_CODE,
        S_ATTR_DEBUG,
        S_ATTR_SOME_INSTRUCTIONS,
        S_ATTR_EXT_RELOC,
        S_ATTR_LOC_RELOC,
    );
    static FLAGS_PLATFORM: &[Flag<u32>] = &flags!(
        PLATFORM_MACOS,
        PLATFORM_IOS,
        PLATFORM_TVOS,
        PLATFORM_WATCHOS,
        PLATFORM_BRIDGEOS,
        PLATFORM_MACCATALYST,
        PLATFORM_IOSSIMULATOR,
        PLATFORM_TVOSSIMULATOR,
        PLATFORM_WATCHOSSIMULATOR,
        PLATFORM_DRIVERKIT,
    );
    static FLAGS_N_EXT: &[Flag<u8>] = &flags!(N_PEXT, N_EXT);
    static FLAGS_N_TYPE: &[Flag<u8>] = &flags!(N_UNDF, N_ABS, N_SECT, N_PBUD, N_INDR);
    static FLAGS_N_STAB: &[Flag<u8>] = &flags!(
        N_GSYM, N_FNAME, N_FUN, N_STSYM, N_LCSYM, N_BNSYM, N_AST, N_OPT, N_RSYM, N_SLINE, N_ENSYM,
        N_SSYM, N_SO, N_OSO, N_LSYM, N_BINCL, N_SOL, N_PARAMS, N_VERSION, N_OLEVEL, N_PSYM,
        N_EINCL, N_ENTRY, N_LBRAC, N_EXCL, N_RBRAC, N_BCOMM, N_ECOMM, N_ECOML, N_LENG, N_PC,
    );
    static FLAGS_REFERENCE: &[Flag<u16>] = &flags!(
        REFERENCE_FLAG_UNDEFINED_NON_LAZY,
        REFERENCE_FLAG_UNDEFINED_LAZY,
        REFERENCE_FLAG_DEFINED,
        REFERENCE_FLAG_PRIVATE_DEFINED,
        REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY,
        REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY,
    );
    static FLAGS_N_DESC: &[Flag<u16>] = &flags!(
        REFERENCED_DYNAMICALLY,
        N_NO_DEAD_STRIP,
        N_DESC_DISCARDED,
        N_WEAK_REF,
        N_WEAK_DEF,
        N_REF_TO_WEAK,
        N_ARM_THUMB_DEF,
        N_SYMBOL_RESOLVER,
        N_ALT_ENTRY,
    );
    static FLAGS_GENERIC_RELOC: &[Flag<u8>] = &flags!(
        GENERIC_RELOC_VANILLA,
        GENERIC_RELOC_PAIR,
        GENERIC_RELOC_SECTDIFF,
        GENERIC_RELOC_PB_LA_PTR,
        GENERIC_RELOC_LOCAL_SECTDIFF,
        GENERIC_RELOC_TLV,
    );
    static FLAGS_ARM_RELOC: &[Flag<u8>] = &flags!(
        ARM_RELOC_VANILLA,
        ARM_RELOC_PAIR,
        ARM_RELOC_SECTDIFF,
        ARM_RELOC_LOCAL_SECTDIFF,
        ARM_RELOC_PB_LA_PTR,
        ARM_RELOC_BR24,
        ARM_THUMB_RELOC_BR22,
        ARM_THUMB_32BIT_BRANCH,
        ARM_RELOC_HALF,
        ARM_RELOC_HALF_SECTDIFF,
    );
    static FLAGS_ARM64_RELOC: &[Flag<u8>] = &flags!(
        ARM64_RELOC_UNSIGNED,
        ARM64_RELOC_SUBTRACTOR,
        ARM64_RELOC_BRANCH26,
        ARM64_RELOC_PAGE21,
        ARM64_RELOC_PAGEOFF12,
        ARM64_RELOC_GOT_LOAD_PAGE21,
        ARM64_RELOC_GOT_LOAD_PAGEOFF12,
        ARM64_RELOC_POINTER_TO_GOT,
        ARM64_RELOC_TLVP_LOAD_PAGE21,
        ARM64_RELOC_TLVP_LOAD_PAGEOFF12,
        ARM64_RELOC_ADDEND,
        ARM64_RELOC_AUTHENTICATED_POINTER,
    );
    static FLAGS_PPC_RELOC: &[Flag<u8>] = &flags!(
        PPC_RELOC_VANILLA,
        PPC_RELOC_PAIR,
        PPC_RELOC_BR14,
        PPC_RELOC_BR24,
        PPC_RELOC_HI16,
        PPC_RELOC_LO16,
        PPC_RELOC_HA16,
        PPC_RELOC_LO14,
        PPC_RELOC_SECTDIFF,
        PPC_RELOC_PB_LA_PTR,
        PPC_RELOC_HI16_SECTDIFF,
        PPC_RELOC_LO16_SECTDIFF,
        PPC_RELOC_HA16_SECTDIFF,
        PPC_RELOC_JBSR,
        PPC_RELOC_LO14_SECTDIFF,
        PPC_RELOC_LOCAL_SECTDIFF,
    );
    static FLAGS_X86_64_RELOC: &[Flag<u8>] = &flags!(
        X86_64_RELOC_UNSIGNED,
        X86_64_RELOC_SIGNED,
        X86_64_RELOC_BRANCH,
        X86_64_RELOC_GOT_LOAD,
        X86_64_RELOC_GOT,
        X86_64_RELOC_SUBTRACTOR,
        X86_64_RELOC_SIGNED_1,
        X86_64_RELOC_SIGNED_2,
        X86_64_RELOC_SIGNED_4,
        X86_64_RELOC_TLV,
    );
}

mod pe {
    use super::*;
    use object::pe::*;
    use object::read::pe::*;
    use object::LittleEndian as LE;

    pub(super) fn print_coff(p: &mut Printer<impl Write>, data: &[u8]) {
        let mut offset = 0;
        if let Ok(header) = ImageFileHeader::parse(data, &mut offset) {
            println!("Format: COFF");
            print_file(p, header);
            let sections = header.sections(data, offset).ok();
            let symbols = header.symbols(data).ok();
            if let Some(ref sections) = sections {
                print_sections(p, data, header.machine.get(LE), symbols.as_ref(), &sections);
            }
            if let Some(ref symbols) = symbols {
                print_symbols(p, sections.as_ref(), &symbols);
            }
        }
    }

    pub(super) fn print_pe32(p: &mut Printer<impl Write>, data: &[u8]) {
        println!("Format: PE 32-bit");
        print_pe::<ImageNtHeaders32, _>(p, data);
    }

    pub(super) fn print_pe64(p: &mut Printer<impl Write>, data: &[u8]) {
        println!("Format: PE 64-bit");
        print_pe::<ImageNtHeaders64, _>(p, data);
    }

    fn print_pe<Pe: ImageNtHeaders, W: Write>(p: &mut Printer<W>, data: &[u8]) {
        if let Ok(dos_header) = ImageDosHeader::parse(data) {
            p.group("ImageDosHeader", |p| {
                p.field_hex("Magic", dos_header.e_magic.get(LE));
                p.field_hex("CountBytesLastPage", dos_header.e_cblp.get(LE));
                p.field_hex("CountPages", dos_header.e_cp.get(LE));
                p.field_hex("CountRelocations", dos_header.e_crlc.get(LE));
                p.field_hex("CountHeaderParagraphs", dos_header.e_cparhdr.get(LE));
                p.field_hex("MinAllocParagraphs", dos_header.e_minalloc.get(LE));
                p.field_hex("MaxAllocParagraphs", dos_header.e_maxalloc.get(LE));
                p.field_hex("StackSegment", dos_header.e_ss.get(LE));
                p.field_hex("StackPointer", dos_header.e_sp.get(LE));
                p.field_hex("Checksum", dos_header.e_csum.get(LE));
                p.field_hex("InstructionPointer", dos_header.e_ip.get(LE));
                p.field_hex("CodeSegment", dos_header.e_cs.get(LE));
                p.field_hex("AddressOfRelocations", dos_header.e_lfarlc.get(LE));
                p.field_hex("OverlayNumber", dos_header.e_ovno.get(LE));
                p.field_hex("OemId", dos_header.e_oemid.get(LE));
                p.field_hex("OemInfo", dos_header.e_oeminfo.get(LE));
                p.field_hex("AddressOfNewHeader", dos_header.e_lfanew.get(LE));
            });
            let mut offset = dos_header.nt_headers_offset().into();
            if let Ok((nt_headers, data_directories)) = Pe::parse(data, &mut offset) {
                p.group("ImageNtHeaders", |p| {
                    p.field_hex("Signature", nt_headers.signature());
                });
                let header = nt_headers.file_header();
                let sections = header.sections(data, offset).ok();
                let symbols = header.symbols(data).ok();
                print_file(p, header);
                print_optional(p, nt_headers.optional_header());
                for (index, dir) in data_directories.iter().enumerate() {
                    p.group("ImageDataDirectory", |p| {
                        p.field_enum("Index", index, FLAGS_IMAGE_DIRECTORY_ENTRY);
                        p.field_hex("VirtualAddress", dir.virtual_address.get(LE));
                        p.field_hex("Size", dir.size.get(LE));
                        if let Some(dir_data) = sections
                            .as_ref()
                            .and_then(|sections| dir.data(data, sections).ok())
                        {
                            match index {
                                IMAGE_DIRECTORY_ENTRY_EXPORT => print_export_dir(p, dir, dir_data),
                                // TODO
                                _ => {}
                            }
                        }
                    });
                }
                if let Some(ref sections) = sections {
                    print_sections(p, data, header.machine.get(LE), symbols.as_ref(), &sections);
                }
                if let Some(ref symbols) = symbols {
                    print_symbols(p, sections.as_ref(), &symbols);
                }
            }
        }
    }

    fn print_file(p: &mut Printer<impl Write>, header: &ImageFileHeader) {
        p.group("ImageFileHeader", |p| {
            p.field_enum("Machine", header.machine.get(LE), FLAGS_IMAGE_FILE_MACHINE);
            p.field("NumberOfSections", header.number_of_sections.get(LE));
            p.field("TimeDateStamp", header.time_date_stamp.get(LE));
            p.field_hex(
                "PointerToSymbolTable",
                header.pointer_to_symbol_table.get(LE),
            );
            p.field("NumberOfSymbols", header.number_of_symbols.get(LE));
            p.field_hex(
                "SizeOfOptionalHeader",
                header.size_of_optional_header.get(LE),
            );
            p.field_hex("Characteristics", header.characteristics.get(LE));
            p.flags(header.characteristics.get(LE), 0, FLAGS_IMAGE_FILE);
        });
    }

    fn print_optional(p: &mut Printer<impl Write>, header: &impl ImageOptionalHeader) {
        p.group("ImageOptionalHeader", |p| {
            p.field_hex("Magic", header.magic());
            p.field("MajorLinkerVersion", header.major_linker_version());
            p.field("MinorLinkerVersion", header.minor_linker_version());
            p.field_hex("SizeOfCode", header.size_of_code());
            p.field_hex("SizeOfInitializedData", header.size_of_initialized_data());
            p.field_hex(
                "SizeOfUninitializedData",
                header.size_of_uninitialized_data(),
            );
            p.field_hex("AddressOfEntryPoint", header.address_of_entry_point());
            p.field_hex("BaseOfCode", header.base_of_code());
            p.field_hex("ImageBase", header.image_base());
            p.field_hex("SectionAlignment", header.section_alignment());
            p.field(
                "MajorOperatingSystemVersion",
                header.major_operating_system_version(),
            );
            p.field(
                "MinorOperatingSystemVersion",
                header.minor_operating_system_version(),
            );
            p.field("MajorImageVersion", header.major_image_version());
            p.field("MinorImageVersion", header.minor_image_version());
            p.field("MajorSubsystemVersion", header.major_subsystem_version());
            p.field("MinorSubsystemVersion", header.minor_subsystem_version());
            p.field("Win32VersionValue", header.win32_version_value());
            p.field_hex("SizeOfImage", header.size_of_image());
            p.field_hex("SizeOfHeaders", header.size_of_headers());
            p.field_hex("CheckSum", header.check_sum());
            p.field_enum("Subsystem", header.subsystem(), FLAGS_IMAGE_SUBSYSTEM);
            p.field_hex("DllCharacteristics", header.dll_characteristics());
            p.flags(
                header.dll_characteristics(),
                0,
                FLAGS_IMAGE_DLLCHARACTERISTICS,
            );
            p.field_hex("SizeOfStackReserve", header.size_of_stack_reserve());
            p.field_hex("SizeOfStackCommit", header.size_of_stack_commit());
            p.field_hex("SizeOfHeapReserve", header.size_of_heap_reserve());
            p.field_hex("SizeOfHeapCommit", header.size_of_heap_commit());
            p.field_hex("LoaderFlags", header.loader_flags());
            p.field_hex("NumberOfRvaAndSizes", header.number_of_rva_and_sizes());
        });
    }

    fn print_export_dir(p: &mut Printer<impl Write>, _dir: &ImageDataDirectory, dir_data: &[u8]) {
        if let Ok((export_dir, _)) = object::from_bytes::<pe::ImageExportDirectory>(dir_data) {
            p.group("ImageExportDirectory", |p| {
                p.field_hex("Characteristics", export_dir.characteristics.get(LE));
                p.field_hex("TimeDateStamp", export_dir.time_date_stamp.get(LE));
                p.field("MajorVersion", export_dir.major_version.get(LE));
                p.field("MinorVersion", export_dir.minor_version.get(LE));
                p.field_hex("Name", export_dir.name.get(LE));
                p.field("Base", export_dir.base.get(LE));
                p.field("NumberOfFunctions", export_dir.number_of_functions.get(LE));
                p.field("NumberOfNames", export_dir.number_of_names.get(LE));
                p.field_hex(
                    "AddressOfFunctions",
                    export_dir.address_of_functions.get(LE),
                );
                p.field_hex("AddressOfNames", export_dir.address_of_names.get(LE));
                p.field_hex(
                    "AddressOfNameOrdinals",
                    export_dir.address_of_name_ordinals.get(LE),
                );
                // TODO: display tables
            });
        }
    }

    fn print_sections(
        p: &mut Printer<impl Write>,
        data: &[u8],
        machine: u16,
        symbols: Option<&SymbolTable>,
        sections: &SectionTable,
    ) {
        for (index, section) in sections.iter().enumerate() {
            p.group("ImageSectionHeader", |p| {
                p.field("Index", index + 1);
                if let Some(name) = symbols.and_then(|symbols| section.name(symbols.strings()).ok())
                {
                    p.field_inline_string("Name", name);
                } else {
                    p.field_inline_string("Name", section.raw_name());
                }
                p.field_hex("VirtualSize", section.virtual_size.get(LE));
                p.field_hex("VirtualAddress", section.virtual_address.get(LE));
                p.field_hex("SizeOfRawData", section.size_of_raw_data.get(LE));
                p.field_hex("PointerToRawData", section.pointer_to_raw_data.get(LE));
                p.field_hex(
                    "PointerToRelocations",
                    section.pointer_to_relocations.get(LE),
                );
                p.field_hex(
                    "PointerToLinenumbers",
                    section.pointer_to_linenumbers.get(LE),
                );
                p.field("NumberOfRelocations", section.number_of_relocations.get(LE));
                p.field("NumberOfLinenumbers", section.number_of_linenumbers.get(LE));
                p.field_hex("Characteristics", section.characteristics.get(LE));
                p.flags(section.characteristics.get(LE), 0, FLAGS_IMAGE_SCN);
                p.flags(
                    section.characteristics.get(LE),
                    IMAGE_SCN_ALIGN_MASK,
                    FLAGS_IMAGE_SCN_ALIGN,
                );
                if let Ok(relocations) = section.coff_relocations(data) {
                    for relocation in relocations {
                        p.group("ImageRelocation", |p| {
                            p.field_hex("VirtualAddress", relocation.virtual_address.get(LE));
                            let index = relocation.symbol_table_index.get(LE);
                            let name = symbols.and_then(|symbols| {
                                symbols
                                    .symbol(index as usize)
                                    .and_then(|symbol| symbol.name(symbols.strings()))
                                    .ok()
                            });
                            p.field_string("Symbol", index, name);
                            let proc = match machine {
                                IMAGE_FILE_MACHINE_I386 => FLAGS_IMAGE_REL_I386,
                                IMAGE_FILE_MACHINE_MIPS16
                                | IMAGE_FILE_MACHINE_MIPSFPU
                                | IMAGE_FILE_MACHINE_MIPSFPU16 => FLAGS_IMAGE_REL_MIPS,
                                IMAGE_FILE_MACHINE_ALPHA | IMAGE_FILE_MACHINE_ALPHA64 => {
                                    FLAGS_IMAGE_REL_ALPHA
                                }
                                IMAGE_FILE_MACHINE_POWERPC | IMAGE_FILE_MACHINE_POWERPCFP => {
                                    FLAGS_IMAGE_REL_PPC
                                }
                                IMAGE_FILE_MACHINE_SH3
                                | IMAGE_FILE_MACHINE_SH3DSP
                                | IMAGE_FILE_MACHINE_SH3E
                                | IMAGE_FILE_MACHINE_SH4
                                | IMAGE_FILE_MACHINE_SH5 => FLAGS_IMAGE_REL_SH,
                                IMAGE_FILE_MACHINE_ARM => FLAGS_IMAGE_REL_ARM,
                                IMAGE_FILE_MACHINE_AM33 => FLAGS_IMAGE_REL_AM,
                                IMAGE_FILE_MACHINE_ARM64 => FLAGS_IMAGE_REL_ARM64,
                                IMAGE_FILE_MACHINE_AMD64 => FLAGS_IMAGE_REL_AMD64,
                                IMAGE_FILE_MACHINE_IA64 => FLAGS_IMAGE_REL_IA64,
                                IMAGE_FILE_MACHINE_CEF => FLAGS_IMAGE_REL_CEF,
                                IMAGE_FILE_MACHINE_CEE => FLAGS_IMAGE_REL_CEE,
                                IMAGE_FILE_MACHINE_M32R => FLAGS_IMAGE_REL_M32R,
                                IMAGE_FILE_MACHINE_EBC => FLAGS_IMAGE_REL_EBC,
                                _ => &[],
                            };
                            let typ = relocation.typ.get(LE);
                            p.field_enum("Type", typ, proc);
                            match machine {
                                IMAGE_FILE_MACHINE_POWERPC | IMAGE_FILE_MACHINE_POWERPCFP => {
                                    p.flags(typ, 0, FLAGS_IMAGE_REL_PPC_BITS)
                                }
                                IMAGE_FILE_MACHINE_SH3
                                | IMAGE_FILE_MACHINE_SH3DSP
                                | IMAGE_FILE_MACHINE_SH3E
                                | IMAGE_FILE_MACHINE_SH4
                                | IMAGE_FILE_MACHINE_SH5 => {
                                    p.flags(typ, 0, FLAGS_IMAGE_REL_SH_BITS)
                                }
                                _ => {}
                            }
                        });
                    }
                }
            });
        }
    }

    fn print_symbols(
        p: &mut Printer<impl Write>,
        sections: Option<&SectionTable>,
        symbols: &SymbolTable,
    ) {
        for (index, symbol) in symbols.iter() {
            p.group("ImageSymbol", |p| {
                p.field("Index", index);
                if let Ok(name) = symbol.name(symbols.strings()) {
                    p.field_inline_string("Name", name);
                } else {
                    p.field("Name", format!("{:X?}", symbol.name));
                }
                p.field_hex("Value", symbol.value.get(LE));
                let section = symbol.section_number.get(LE);
                if section == 0 || section >= IMAGE_SYM_SECTION_MAX {
                    p.field_enum("Section", section, FLAGS_IMAGE_SYM);
                } else {
                    let section_name = sections.and_then(|sections| {
                        sections
                            .section(section.into())
                            .and_then(|section| section.name(symbols.strings()))
                            .ok()
                    });
                    p.field_string("Section", section, section_name);
                }
                p.field_hex("Type", symbol.typ.get(LE));
                p.field_enum("BaseType", symbol.base_type(), FLAGS_IMAGE_SYM_TYPE);
                p.field_enum("DerivedType", symbol.derived_type(), FLAGS_IMAGE_SYM_DTYPE);
                p.field_enum("StorageClass", symbol.storage_class, FLAGS_IMAGE_SYM_CLASS);
                p.field_hex("NumberOfAuxSymbols", symbol.number_of_aux_symbols);
                if symbol.has_aux_file_name() {
                    if let Ok(name) = symbols.aux_file_name(index, symbol.number_of_aux_symbols) {
                        p.group("ImageAuxSymbolFile", |p| {
                            p.field_inline_string("Name", name);
                        });
                    }
                } else if symbol.has_aux_function() {
                    if let Ok(aux) = symbols.aux_function(index) {
                        p.group("ImageAuxSymbolFunction", |p| {
                            p.field("TagIndex", aux.tag_index.get(LE));
                            p.field("TotalSize", aux.total_size.get(LE));
                            p.field_hex("PointerToLinenumber", aux.pointer_to_linenumber.get(LE));
                            p.field(
                                "PointerToNextFunction",
                                aux.pointer_to_next_function.get(LE),
                            );
                            p.field("Unused", format!("{:X?}", aux.unused));
                        });
                    }
                } else if symbol.has_aux_section() {
                    if let Ok(aux) = symbols.aux_section(index) {
                        p.group("ImageAuxSymbolSection", |p| {
                            p.field_hex("Length", aux.length.get(LE));
                            p.field("NumberOfRelocations", aux.number_of_relocations.get(LE));
                            p.field("NumberOfLinenumbers", aux.number_of_linenumbers.get(LE));
                            p.field_hex("CheckSum", aux.check_sum.get(LE));
                            p.field("Number", aux.number.get(LE));
                            p.field_enum("Selection", aux.selection, FLAGS_IMAGE_COMDAT_SELECT);
                            p.field_hex("Reserved", aux.reserved);
                            p.field("HighNumber", aux.high_number.get(LE));
                        });
                    }
                }
                // TODO: ImageAuxSymbolFunctionBeginEnd
                // TODO: ImageAuxSymbolWeak
            });
        }
    }

    static FLAGS_IMAGE_FILE: &[Flag<u16>] = &flags!(
        IMAGE_FILE_RELOCS_STRIPPED,
        IMAGE_FILE_EXECUTABLE_IMAGE,
        IMAGE_FILE_LINE_NUMS_STRIPPED,
        IMAGE_FILE_LOCAL_SYMS_STRIPPED,
        IMAGE_FILE_AGGRESIVE_WS_TRIM,
        IMAGE_FILE_LARGE_ADDRESS_AWARE,
        IMAGE_FILE_BYTES_REVERSED_LO,
        IMAGE_FILE_32BIT_MACHINE,
        IMAGE_FILE_DEBUG_STRIPPED,
        IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP,
        IMAGE_FILE_NET_RUN_FROM_SWAP,
        IMAGE_FILE_SYSTEM,
        IMAGE_FILE_DLL,
        IMAGE_FILE_UP_SYSTEM_ONLY,
        IMAGE_FILE_BYTES_REVERSED_HI,
    );
    static FLAGS_IMAGE_FILE_MACHINE: &[Flag<u16>] = &flags!(
        IMAGE_FILE_MACHINE_UNKNOWN,
        IMAGE_FILE_MACHINE_TARGET_HOST,
        IMAGE_FILE_MACHINE_I386,
        IMAGE_FILE_MACHINE_R3000,
        IMAGE_FILE_MACHINE_R4000,
        IMAGE_FILE_MACHINE_R10000,
        IMAGE_FILE_MACHINE_WCEMIPSV2,
        IMAGE_FILE_MACHINE_ALPHA,
        IMAGE_FILE_MACHINE_SH3,
        IMAGE_FILE_MACHINE_SH3DSP,
        IMAGE_FILE_MACHINE_SH3E,
        IMAGE_FILE_MACHINE_SH4,
        IMAGE_FILE_MACHINE_SH5,
        IMAGE_FILE_MACHINE_ARM,
        IMAGE_FILE_MACHINE_THUMB,
        IMAGE_FILE_MACHINE_ARMNT,
        IMAGE_FILE_MACHINE_AM33,
        IMAGE_FILE_MACHINE_POWERPC,
        IMAGE_FILE_MACHINE_POWERPCFP,
        IMAGE_FILE_MACHINE_IA64,
        IMAGE_FILE_MACHINE_MIPS16,
        IMAGE_FILE_MACHINE_ALPHA64,
        IMAGE_FILE_MACHINE_MIPSFPU,
        IMAGE_FILE_MACHINE_MIPSFPU16,
        IMAGE_FILE_MACHINE_AXP64,
        IMAGE_FILE_MACHINE_TRICORE,
        IMAGE_FILE_MACHINE_CEF,
        IMAGE_FILE_MACHINE_EBC,
        IMAGE_FILE_MACHINE_AMD64,
        IMAGE_FILE_MACHINE_M32R,
        IMAGE_FILE_MACHINE_ARM64,
        IMAGE_FILE_MACHINE_CEE,
    );
    static FLAGS_IMAGE_SCN: &[Flag<u32>] = &flags!(
        IMAGE_SCN_TYPE_NO_PAD,
        IMAGE_SCN_CNT_CODE,
        IMAGE_SCN_CNT_INITIALIZED_DATA,
        IMAGE_SCN_CNT_UNINITIALIZED_DATA,
        IMAGE_SCN_LNK_OTHER,
        IMAGE_SCN_LNK_INFO,
        IMAGE_SCN_LNK_REMOVE,
        IMAGE_SCN_LNK_COMDAT,
        IMAGE_SCN_NO_DEFER_SPEC_EXC,
        IMAGE_SCN_GPREL,
        IMAGE_SCN_MEM_FARDATA,
        IMAGE_SCN_MEM_PURGEABLE,
        IMAGE_SCN_MEM_16BIT,
        IMAGE_SCN_MEM_LOCKED,
        IMAGE_SCN_MEM_PRELOAD,
        IMAGE_SCN_LNK_NRELOC_OVFL,
        IMAGE_SCN_MEM_DISCARDABLE,
        IMAGE_SCN_MEM_NOT_CACHED,
        IMAGE_SCN_MEM_NOT_PAGED,
        IMAGE_SCN_MEM_SHARED,
        IMAGE_SCN_MEM_EXECUTE,
        IMAGE_SCN_MEM_READ,
        IMAGE_SCN_MEM_WRITE,
    );
    static FLAGS_IMAGE_SCN_ALIGN: &[Flag<u32>] = &flags!(
        IMAGE_SCN_ALIGN_1BYTES,
        IMAGE_SCN_ALIGN_2BYTES,
        IMAGE_SCN_ALIGN_4BYTES,
        IMAGE_SCN_ALIGN_8BYTES,
        IMAGE_SCN_ALIGN_16BYTES,
        IMAGE_SCN_ALIGN_32BYTES,
        IMAGE_SCN_ALIGN_64BYTES,
        IMAGE_SCN_ALIGN_128BYTES,
        IMAGE_SCN_ALIGN_256BYTES,
        IMAGE_SCN_ALIGN_512BYTES,
        IMAGE_SCN_ALIGN_1024BYTES,
        IMAGE_SCN_ALIGN_2048BYTES,
        IMAGE_SCN_ALIGN_4096BYTES,
        IMAGE_SCN_ALIGN_8192BYTES,
    );
    static FLAGS_IMAGE_REL_I386: &[Flag<u16>] = &flags!(
        IMAGE_REL_I386_ABSOLUTE,
        IMAGE_REL_I386_DIR16,
        IMAGE_REL_I386_REL16,
        IMAGE_REL_I386_DIR32,
        IMAGE_REL_I386_DIR32NB,
        IMAGE_REL_I386_SEG12,
        IMAGE_REL_I386_SECTION,
        IMAGE_REL_I386_SECREL,
        IMAGE_REL_I386_TOKEN,
        IMAGE_REL_I386_SECREL7,
        IMAGE_REL_I386_REL32,
    );
    static FLAGS_IMAGE_REL_MIPS: &[Flag<u16>] = &flags!(
        IMAGE_REL_MIPS_ABSOLUTE,
        IMAGE_REL_MIPS_REFHALF,
        IMAGE_REL_MIPS_REFWORD,
        IMAGE_REL_MIPS_JMPADDR,
        IMAGE_REL_MIPS_REFHI,
        IMAGE_REL_MIPS_REFLO,
        IMAGE_REL_MIPS_GPREL,
        IMAGE_REL_MIPS_LITERAL,
        IMAGE_REL_MIPS_SECTION,
        IMAGE_REL_MIPS_SECREL,
        IMAGE_REL_MIPS_SECRELLO,
        IMAGE_REL_MIPS_SECRELHI,
        IMAGE_REL_MIPS_TOKEN,
        IMAGE_REL_MIPS_JMPADDR16,
        IMAGE_REL_MIPS_REFWORDNB,
        IMAGE_REL_MIPS_PAIR,
    );
    static FLAGS_IMAGE_REL_ALPHA: &[Flag<u16>] = &flags!(
        IMAGE_REL_ALPHA_ABSOLUTE,
        IMAGE_REL_ALPHA_REFLONG,
        IMAGE_REL_ALPHA_REFQUAD,
        IMAGE_REL_ALPHA_GPREL32,
        IMAGE_REL_ALPHA_LITERAL,
        IMAGE_REL_ALPHA_LITUSE,
        IMAGE_REL_ALPHA_GPDISP,
        IMAGE_REL_ALPHA_BRADDR,
        IMAGE_REL_ALPHA_HINT,
        IMAGE_REL_ALPHA_INLINE_REFLONG,
        IMAGE_REL_ALPHA_REFHI,
        IMAGE_REL_ALPHA_REFLO,
        IMAGE_REL_ALPHA_PAIR,
        IMAGE_REL_ALPHA_MATCH,
        IMAGE_REL_ALPHA_SECTION,
        IMAGE_REL_ALPHA_SECREL,
        IMAGE_REL_ALPHA_REFLONGNB,
        IMAGE_REL_ALPHA_SECRELLO,
        IMAGE_REL_ALPHA_SECRELHI,
        IMAGE_REL_ALPHA_REFQ3,
        IMAGE_REL_ALPHA_REFQ2,
        IMAGE_REL_ALPHA_REFQ1,
        IMAGE_REL_ALPHA_GPRELLO,
        IMAGE_REL_ALPHA_GPRELHI,
    );
    static FLAGS_IMAGE_REL_PPC: &[Flag<u16>] = &flags!(
        IMAGE_REL_PPC_ABSOLUTE,
        IMAGE_REL_PPC_ADDR64,
        IMAGE_REL_PPC_ADDR32,
        IMAGE_REL_PPC_ADDR24,
        IMAGE_REL_PPC_ADDR16,
        IMAGE_REL_PPC_ADDR14,
        IMAGE_REL_PPC_REL24,
        IMAGE_REL_PPC_REL14,
        IMAGE_REL_PPC_TOCREL16,
        IMAGE_REL_PPC_TOCREL14,
        IMAGE_REL_PPC_ADDR32NB,
        IMAGE_REL_PPC_SECREL,
        IMAGE_REL_PPC_SECTION,
        IMAGE_REL_PPC_IFGLUE,
        IMAGE_REL_PPC_IMGLUE,
        IMAGE_REL_PPC_SECREL16,
        IMAGE_REL_PPC_REFHI,
        IMAGE_REL_PPC_REFLO,
        IMAGE_REL_PPC_PAIR,
        IMAGE_REL_PPC_SECRELLO,
        IMAGE_REL_PPC_SECRELHI,
        IMAGE_REL_PPC_GPREL,
        IMAGE_REL_PPC_TOKEN,
    );
    static FLAGS_IMAGE_REL_PPC_BITS: &[Flag<u16>] = &flags!(
        IMAGE_REL_PPC_NEG,
        IMAGE_REL_PPC_BRTAKEN,
        IMAGE_REL_PPC_BRNTAKEN,
        IMAGE_REL_PPC_TOCDEFN,
    );
    static FLAGS_IMAGE_REL_SH: &[Flag<u16>] = &flags!(
        IMAGE_REL_SH3_ABSOLUTE,
        IMAGE_REL_SH3_DIRECT16,
        IMAGE_REL_SH3_DIRECT32,
        IMAGE_REL_SH3_DIRECT8,
        IMAGE_REL_SH3_DIRECT8_WORD,
        IMAGE_REL_SH3_DIRECT8_LONG,
        IMAGE_REL_SH3_DIRECT4,
        IMAGE_REL_SH3_DIRECT4_WORD,
        IMAGE_REL_SH3_DIRECT4_LONG,
        IMAGE_REL_SH3_PCREL8_WORD,
        IMAGE_REL_SH3_PCREL8_LONG,
        IMAGE_REL_SH3_PCREL12_WORD,
        IMAGE_REL_SH3_STARTOF_SECTION,
        IMAGE_REL_SH3_SIZEOF_SECTION,
        IMAGE_REL_SH3_SECTION,
        IMAGE_REL_SH3_SECREL,
        IMAGE_REL_SH3_DIRECT32_NB,
        IMAGE_REL_SH3_GPREL4_LONG,
        IMAGE_REL_SH3_TOKEN,
        IMAGE_REL_SHM_PCRELPT,
        IMAGE_REL_SHM_REFLO,
        IMAGE_REL_SHM_REFHALF,
        IMAGE_REL_SHM_RELLO,
        IMAGE_REL_SHM_RELHALF,
        IMAGE_REL_SHM_PAIR,
    );
    static FLAGS_IMAGE_REL_SH_BITS: &[Flag<u16>] = &flags!(IMAGE_REL_SH_NOMODE,);
    static FLAGS_IMAGE_REL_ARM: &[Flag<u16>] = &flags!(
        IMAGE_REL_ARM_ABSOLUTE,
        IMAGE_REL_ARM_ADDR32,
        IMAGE_REL_ARM_ADDR32NB,
        IMAGE_REL_ARM_BRANCH24,
        IMAGE_REL_ARM_BRANCH11,
        IMAGE_REL_ARM_TOKEN,
        IMAGE_REL_ARM_GPREL12,
        IMAGE_REL_ARM_GPREL7,
        IMAGE_REL_ARM_BLX24,
        IMAGE_REL_ARM_BLX11,
        IMAGE_REL_ARM_SECTION,
        IMAGE_REL_ARM_SECREL,
        IMAGE_REL_ARM_MOV32A,
        IMAGE_REL_ARM_MOV32T,
        IMAGE_REL_ARM_BRANCH20T,
        IMAGE_REL_ARM_BRANCH24T,
        IMAGE_REL_ARM_BLX23T,
    );
    static FLAGS_IMAGE_REL_AM: &[Flag<u16>] = &flags!(
        IMAGE_REL_AM_ABSOLUTE,
        IMAGE_REL_AM_ADDR32,
        IMAGE_REL_AM_ADDR32NB,
        IMAGE_REL_AM_CALL32,
        IMAGE_REL_AM_FUNCINFO,
        IMAGE_REL_AM_REL32_1,
        IMAGE_REL_AM_REL32_2,
        IMAGE_REL_AM_SECREL,
        IMAGE_REL_AM_SECTION,
        IMAGE_REL_AM_TOKEN,
    );
    static FLAGS_IMAGE_REL_ARM64: &[Flag<u16>] = &flags!(
        IMAGE_REL_ARM64_ABSOLUTE,
        IMAGE_REL_ARM64_ADDR32,
        IMAGE_REL_ARM64_ADDR32NB,
        IMAGE_REL_ARM64_BRANCH26,
        IMAGE_REL_ARM64_PAGEBASE_REL21,
        IMAGE_REL_ARM64_REL21,
        IMAGE_REL_ARM64_PAGEOFFSET_12A,
        IMAGE_REL_ARM64_PAGEOFFSET_12L,
        IMAGE_REL_ARM64_SECREL,
        IMAGE_REL_ARM64_SECREL_LOW12A,
        IMAGE_REL_ARM64_SECREL_HIGH12A,
        IMAGE_REL_ARM64_SECREL_LOW12L,
        IMAGE_REL_ARM64_TOKEN,
        IMAGE_REL_ARM64_SECTION,
        IMAGE_REL_ARM64_ADDR64,
        IMAGE_REL_ARM64_BRANCH19,
    );
    static FLAGS_IMAGE_REL_AMD64: &[Flag<u16>] = &flags!(
        IMAGE_REL_AMD64_ABSOLUTE,
        IMAGE_REL_AMD64_ADDR64,
        IMAGE_REL_AMD64_ADDR32,
        IMAGE_REL_AMD64_ADDR32NB,
        IMAGE_REL_AMD64_REL32,
        IMAGE_REL_AMD64_REL32_1,
        IMAGE_REL_AMD64_REL32_2,
        IMAGE_REL_AMD64_REL32_3,
        IMAGE_REL_AMD64_REL32_4,
        IMAGE_REL_AMD64_REL32_5,
        IMAGE_REL_AMD64_SECTION,
        IMAGE_REL_AMD64_SECREL,
        IMAGE_REL_AMD64_SECREL7,
        IMAGE_REL_AMD64_TOKEN,
        IMAGE_REL_AMD64_SREL32,
        IMAGE_REL_AMD64_PAIR,
        IMAGE_REL_AMD64_SSPAN32,
        IMAGE_REL_AMD64_EHANDLER,
        IMAGE_REL_AMD64_IMPORT_BR,
        IMAGE_REL_AMD64_IMPORT_CALL,
        IMAGE_REL_AMD64_CFG_BR,
        IMAGE_REL_AMD64_CFG_BR_REX,
        IMAGE_REL_AMD64_CFG_CALL,
        IMAGE_REL_AMD64_INDIR_BR,
        IMAGE_REL_AMD64_INDIR_BR_REX,
        IMAGE_REL_AMD64_INDIR_CALL,
        IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_FIRST,
        IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_LAST,
    );
    static FLAGS_IMAGE_REL_IA64: &[Flag<u16>] = &flags!(
        IMAGE_REL_IA64_ABSOLUTE,
        IMAGE_REL_IA64_IMM14,
        IMAGE_REL_IA64_IMM22,
        IMAGE_REL_IA64_IMM64,
        IMAGE_REL_IA64_DIR32,
        IMAGE_REL_IA64_DIR64,
        IMAGE_REL_IA64_PCREL21B,
        IMAGE_REL_IA64_PCREL21M,
        IMAGE_REL_IA64_PCREL21F,
        IMAGE_REL_IA64_GPREL22,
        IMAGE_REL_IA64_LTOFF22,
        IMAGE_REL_IA64_SECTION,
        IMAGE_REL_IA64_SECREL22,
        IMAGE_REL_IA64_SECREL64I,
        IMAGE_REL_IA64_SECREL32,
        IMAGE_REL_IA64_DIR32NB,
        IMAGE_REL_IA64_SREL14,
        IMAGE_REL_IA64_SREL22,
        IMAGE_REL_IA64_SREL32,
        IMAGE_REL_IA64_UREL32,
        IMAGE_REL_IA64_PCREL60X,
        IMAGE_REL_IA64_PCREL60B,
        IMAGE_REL_IA64_PCREL60F,
        IMAGE_REL_IA64_PCREL60I,
        IMAGE_REL_IA64_PCREL60M,
        IMAGE_REL_IA64_IMMGPREL64,
        IMAGE_REL_IA64_TOKEN,
        IMAGE_REL_IA64_GPREL32,
        IMAGE_REL_IA64_ADDEND,
    );
    static FLAGS_IMAGE_REL_CEF: &[Flag<u16>] = &flags!(
        IMAGE_REL_CEF_ABSOLUTE,
        IMAGE_REL_CEF_ADDR32,
        IMAGE_REL_CEF_ADDR64,
        IMAGE_REL_CEF_ADDR32NB,
        IMAGE_REL_CEF_SECTION,
        IMAGE_REL_CEF_SECREL,
        IMAGE_REL_CEF_TOKEN,
    );
    static FLAGS_IMAGE_REL_CEE: &[Flag<u16>] = &flags!(
        IMAGE_REL_CEE_ABSOLUTE,
        IMAGE_REL_CEE_ADDR32,
        IMAGE_REL_CEE_ADDR64,
        IMAGE_REL_CEE_ADDR32NB,
        IMAGE_REL_CEE_SECTION,
        IMAGE_REL_CEE_SECREL,
        IMAGE_REL_CEE_TOKEN,
    );
    static FLAGS_IMAGE_REL_M32R: &[Flag<u16>] = &flags!(
        IMAGE_REL_M32R_ABSOLUTE,
        IMAGE_REL_M32R_ADDR32,
        IMAGE_REL_M32R_ADDR32NB,
        IMAGE_REL_M32R_ADDR24,
        IMAGE_REL_M32R_GPREL16,
        IMAGE_REL_M32R_PCREL24,
        IMAGE_REL_M32R_PCREL16,
        IMAGE_REL_M32R_PCREL8,
        IMAGE_REL_M32R_REFHALF,
        IMAGE_REL_M32R_REFHI,
        IMAGE_REL_M32R_REFLO,
        IMAGE_REL_M32R_PAIR,
        IMAGE_REL_M32R_SECTION,
        IMAGE_REL_M32R_SECREL32,
        IMAGE_REL_M32R_TOKEN,
    );
    static FLAGS_IMAGE_REL_EBC: &[Flag<u16>] = &flags!(
        IMAGE_REL_EBC_ABSOLUTE,
        IMAGE_REL_EBC_ADDR32NB,
        IMAGE_REL_EBC_REL32,
        IMAGE_REL_EBC_SECTION,
        IMAGE_REL_EBC_SECREL,
    );
    static FLAGS_IMAGE_SYM: &[Flag<u16>] =
        &flags!(IMAGE_SYM_UNDEFINED, IMAGE_SYM_ABSOLUTE, IMAGE_SYM_DEBUG,);
    static FLAGS_IMAGE_SYM_TYPE: &[Flag<u16>] = &flags!(
        IMAGE_SYM_TYPE_NULL,
        IMAGE_SYM_TYPE_VOID,
        IMAGE_SYM_TYPE_CHAR,
        IMAGE_SYM_TYPE_SHORT,
        IMAGE_SYM_TYPE_INT,
        IMAGE_SYM_TYPE_LONG,
        IMAGE_SYM_TYPE_FLOAT,
        IMAGE_SYM_TYPE_DOUBLE,
        IMAGE_SYM_TYPE_STRUCT,
        IMAGE_SYM_TYPE_UNION,
        IMAGE_SYM_TYPE_ENUM,
        IMAGE_SYM_TYPE_MOE,
        IMAGE_SYM_TYPE_BYTE,
        IMAGE_SYM_TYPE_WORD,
        IMAGE_SYM_TYPE_UINT,
        IMAGE_SYM_TYPE_DWORD,
        IMAGE_SYM_TYPE_PCODE,
    );
    static FLAGS_IMAGE_SYM_DTYPE: &[Flag<u16>] = &flags!(
        IMAGE_SYM_DTYPE_NULL,
        IMAGE_SYM_DTYPE_POINTER,
        IMAGE_SYM_DTYPE_FUNCTION,
        IMAGE_SYM_DTYPE_ARRAY,
    );
    static FLAGS_IMAGE_SYM_CLASS: &[Flag<u8>] = &flags!(
        IMAGE_SYM_CLASS_END_OF_FUNCTION,
        IMAGE_SYM_CLASS_NULL,
        IMAGE_SYM_CLASS_AUTOMATIC,
        IMAGE_SYM_CLASS_EXTERNAL,
        IMAGE_SYM_CLASS_STATIC,
        IMAGE_SYM_CLASS_REGISTER,
        IMAGE_SYM_CLASS_EXTERNAL_DEF,
        IMAGE_SYM_CLASS_LABEL,
        IMAGE_SYM_CLASS_UNDEFINED_LABEL,
        IMAGE_SYM_CLASS_MEMBER_OF_STRUCT,
        IMAGE_SYM_CLASS_ARGUMENT,
        IMAGE_SYM_CLASS_STRUCT_TAG,
        IMAGE_SYM_CLASS_MEMBER_OF_UNION,
        IMAGE_SYM_CLASS_UNION_TAG,
        IMAGE_SYM_CLASS_TYPE_DEFINITION,
        IMAGE_SYM_CLASS_UNDEFINED_STATIC,
        IMAGE_SYM_CLASS_ENUM_TAG,
        IMAGE_SYM_CLASS_MEMBER_OF_ENUM,
        IMAGE_SYM_CLASS_REGISTER_PARAM,
        IMAGE_SYM_CLASS_BIT_FIELD,
        IMAGE_SYM_CLASS_FAR_EXTERNAL,
        IMAGE_SYM_CLASS_BLOCK,
        IMAGE_SYM_CLASS_FUNCTION,
        IMAGE_SYM_CLASS_END_OF_STRUCT,
        IMAGE_SYM_CLASS_FILE,
        IMAGE_SYM_CLASS_SECTION,
        IMAGE_SYM_CLASS_WEAK_EXTERNAL,
        IMAGE_SYM_CLASS_CLR_TOKEN,
    );
    static FLAGS_IMAGE_COMDAT_SELECT: &[Flag<u8>] = &flags!(
        IMAGE_COMDAT_SELECT_NODUPLICATES,
        IMAGE_COMDAT_SELECT_ANY,
        IMAGE_COMDAT_SELECT_SAME_SIZE,
        IMAGE_COMDAT_SELECT_EXACT_MATCH,
        IMAGE_COMDAT_SELECT_ASSOCIATIVE,
        IMAGE_COMDAT_SELECT_LARGEST,
        IMAGE_COMDAT_SELECT_NEWEST,
    );
    static FLAGS_IMAGE_SUBSYSTEM: &[Flag<u16>] = &flags!(
        IMAGE_SUBSYSTEM_UNKNOWN,
        IMAGE_SUBSYSTEM_NATIVE,
        IMAGE_SUBSYSTEM_WINDOWS_GUI,
        IMAGE_SUBSYSTEM_WINDOWS_CUI,
        IMAGE_SUBSYSTEM_OS2_CUI,
        IMAGE_SUBSYSTEM_POSIX_CUI,
        IMAGE_SUBSYSTEM_NATIVE_WINDOWS,
        IMAGE_SUBSYSTEM_WINDOWS_CE_GUI,
        IMAGE_SUBSYSTEM_EFI_APPLICATION,
        IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER,
        IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER,
        IMAGE_SUBSYSTEM_EFI_ROM,
        IMAGE_SUBSYSTEM_XBOX,
        IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION,
        IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG,
    );
    static FLAGS_IMAGE_DLLCHARACTERISTICS: &[Flag<u16>] = &flags!(
        IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA,
        IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE,
        IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY,
        IMAGE_DLLCHARACTERISTICS_NX_COMPAT,
        IMAGE_DLLCHARACTERISTICS_NO_ISOLATION,
        IMAGE_DLLCHARACTERISTICS_NO_SEH,
        IMAGE_DLLCHARACTERISTICS_NO_BIND,
        IMAGE_DLLCHARACTERISTICS_APPCONTAINER,
        IMAGE_DLLCHARACTERISTICS_WDM_DRIVER,
        IMAGE_DLLCHARACTERISTICS_GUARD_CF,
        IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE,
    );
    static FLAGS_IMAGE_DIRECTORY_ENTRY: &[Flag<usize>] = &flags!(
        IMAGE_DIRECTORY_ENTRY_EXPORT,
        IMAGE_DIRECTORY_ENTRY_IMPORT,
        IMAGE_DIRECTORY_ENTRY_RESOURCE,
        IMAGE_DIRECTORY_ENTRY_EXCEPTION,
        IMAGE_DIRECTORY_ENTRY_SECURITY,
        IMAGE_DIRECTORY_ENTRY_BASERELOC,
        IMAGE_DIRECTORY_ENTRY_DEBUG,
        IMAGE_DIRECTORY_ENTRY_ARCHITECTURE,
        IMAGE_DIRECTORY_ENTRY_GLOBALPTR,
        IMAGE_DIRECTORY_ENTRY_TLS,
        IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
        IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT,
        IMAGE_DIRECTORY_ENTRY_IAT,
        IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,
        IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR,
    );
}
