wazabin-binary 0.1.1

Binary container formats and architecture metadata for binary analysis
Documentation
//! The ELF/PE machine architecture enum, shared by the container parsers.
//! Moved here from harbinger so `wazabin_binary` stays a leaf below `qcode`.

use std::fmt;

// 100 first ELF values and larger ones supported
// by the Linux kernel

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Arch {
    M32,
    Sparc,
    I386,
    M68K,
    M88K,
    I860,
    Mips,
    S370,
    MipsRs3Le,
    PaRisc,
    Vpp500,
    Sparc32Plus,
    I960,
    Ppc,
    Ppc64,
    S390,
    V800,
    Fr20,
    Rh32,
    Rce,
    Arm,
    Alpha,
    Sh,
    SparcV9,
    Tricore,
    Arc,
    H8300,
    H8300H,
    H8S,
    H8500,
    Ia64,
    MipsX,
    ColdFire,
    M68Hc12,
    Mma,
    Pcp,
    Ncpu,
    Ndr1,
    StarCore,
    Me16,
    St100,
    TinyJ,
    X86_64,
    Pdsp,
    Pdp10,
    Pdp11,
    Fx66,
    St9Plus,
    St7,
    M68Hc16,
    M68Hc11,
    M68Hc08,
    M68Hc05,
    Svx,
    St19,
    Vax,
    Cris,
    Javelin,
    FirePath,
    Zsp,
    Mmix,
    Huany,
    Prism,
    Avr,
    Fr30,
    D10V,
    D30V,
    V850,
    M32R,
    Mn10300,
    Mn10200,
    PicoJava,
    OpenRisc,
    ArcA5,
    Xtensa,
    VideoCore,
    TmmGpp,
    Ns32K,
    Tpc,
    Snp1K,
    St200,
    Blackfin,
    Unicore,
    AlteraNios2,
    TIC6000,
    Hexagon,
    NDS32,
    AArch64,
    TILEPro,
    Microblaze,
    TILEGx,
    ARCv2,
    RISCV,
    BPF,
    CSKY,
    LoongArch,
    FRV,
}

impl fmt::Display for Arch {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let desc = match self {
            Self::M32 => "AT&T WE 32100",
            Self::Sparc => "SPARC",
            Self::I386 => "Intel 80386",
            Self::M68K => "Motorola 68000",
            Self::M88K => "Motorola 88000",
            Self::I860 => "Intel 80860",
            Self::Mips => "MIPS I Architecture",
            Self::S370 => "IBM System/370 Processor",
            Self::MipsRs3Le => "MIPS RS3000 Little-endian",
            Self::PaRisc => "Hewlett-Packard PA-RISC",
            Self::Vpp500 => "Fujitsu VPP500",
            Self::Sparc32Plus => "Enhanced instruction set SPARC",
            Self::I960 => "Intel 80960",
            Self::Ppc => "PowerPC",
            Self::Ppc64 => "64-bit PowerPC",
            Self::S390 => "IBM System/390 Processor",
            Self::V800 => "NEC V800",
            Self::Fr20 => "Fujitsu FR20",
            Self::Rh32 => "TRW RH-32",
            Self::Rce => "Motorola RCE",
            Self::Arm => "Advanced RISC Machines ARM",
            Self::Alpha => "Digital Alpha",
            Self::Sh => "Hitachi SH",
            Self::SparcV9 => "SPARC Version 9",
            Self::Tricore => "Siemens TriCore embedded processor",
            Self::Arc => "Argonaut RISC Core, Argonaut Technologies Inc.",
            Self::H8300 => "Hitachi H8/300",
            Self::H8300H => "Hitachi H8/300H",
            Self::H8S => "Hitachi H8S",
            Self::H8500 => "Hitachi H8/500",
            Self::Ia64 => "Intel IA-64 processor architecture",
            Self::MipsX => "Stanford MIPS-X",
            Self::ColdFire => "Motorola ColdFire",
            Self::M68Hc12 => "Motorola M68HC12",
            Self::Mma => "Fujitsu MMA Multimedia Accelerator",
            Self::Pcp => "Siemens PCP",
            Self::Ncpu => "Sony nCPU embedded RISC processor",
            Self::Ndr1 => "Denso NDR1 microprocessor",
            Self::StarCore => "Motorola Star*Core processor",
            Self::Me16 => "Toyota ME16 processor",
            Self::St100 => "STMicroelectronics ST100 processor",
            Self::TinyJ => "Advanced Logic Corp. TinyJ embedded processor family",
            Self::X86_64 => "AMD x86-64 architecture",
            Self::Pdsp => "Sony DSP Processor",
            Self::Pdp10 => "Digital Equipment Corp. PDP-10",
            Self::Pdp11 => "Digital Equipment Corp. PDP-11",
            Self::Fx66 => "Siemens FX66 microcontroller",
            Self::St9Plus => "STMicroelectronics ST9+ 8/16 bit microcontroller",
            Self::St7 => "STMicroelectronics ST7 8-bit microcontroller",
            Self::M68Hc16 => "Motorola MC68HC16 Microcontroller",
            Self::M68Hc11 => "Motorola MC68HC11 Microcontroller",
            Self::M68Hc08 => "Motorola MC68HC08 Microcontroller",
            Self::M68Hc05 => "Motorola MC68HC05 Microcontroller",
            Self::Svx => "Silicon Graphics SVx",
            Self::St19 => "STMicroelectronics ST19 8-bit microcontroller",
            Self::Vax => "Digital VAX",
            Self::Cris => "Axis Communications 32-bit embedded processor",
            Self::Javelin => "Infineon Technologies 32-bit embedded processor",
            Self::FirePath => "Element 14 64-bit DSP Processor",
            Self::Zsp => "LSI Logic 16-bit DSP Processor",
            Self::Mmix => "Donald Knuth's educational 64-bit processor",
            Self::Huany => "Harvard University machine-independent object files",
            Self::Prism => "SiTera Prism",
            Self::Avr => "Atmel AVR 8-bit microcontroller",
            Self::Fr30 => "Fujitsu FR30",
            Self::D10V => "Mitsubishi D10V",
            Self::D30V => "Mitsubishi D30V",
            Self::V850 => "NEC v850",
            Self::M32R => "Mitsubishi M32R",
            Self::Mn10300 => "Matsushita MN10300",
            Self::Mn10200 => "Matsushita MN10200",
            Self::PicoJava => "picoJava",
            Self::OpenRisc => "OpenRISC 32-bit embedded processor",
            Self::ArcA5 => "ARC Cores Tangent-A5",
            Self::Xtensa => "Tensilica Xtensa Architecture",
            Self::VideoCore => "Alphamosaic VideoCore processor",
            Self::TmmGpp => "Thompson Multimedia General Purpose Processor",
            Self::Ns32K => "National Semiconductor 32000 series",
            Self::Tpc => "Tenor Network TPC processor",
            Self::Snp1K => "Trebia SNP 1000 processor",
            Self::St200 => "STMicroelectronics ST200 microcontroller",
            Self::Blackfin => "ADI Blackfin Processor",
            Self::Unicore => "UniCore-32",
            Self::AlteraNios2 => "Altera Nios II soft-core processor",
            Self::TIC6000 => "TI C6X DSPs",
            Self::Hexagon => "QUALCOMM Hexagon",
            Self::NDS32 => "Andes Technology compact code size embedded RISC processor family",
            Self::AArch64 => "ARM 64 bit",
            Self::TILEPro => "Tilera TILEPro",
            Self::Microblaze => "Xilinx MicroBlaze",
            Self::TILEGx => "Tilera TILE-Gx",
            Self::ARCv2 => "ARCv2 Cores",
            Self::RISCV => "RISC-V",
            Self::BPF => "Linux BPF - in-kernel virtual machine",
            Self::CSKY => "C-SKY",
            Self::LoongArch => "LoongArch",
            Self::FRV => "Fujitsu FR-V",
        };
        f.write_str(desc)
    }
}