Skip to main content

wazabin_binary/
arch.rs

1//! The ELF/PE machine architecture enum, shared by the container parsers.
2//! Moved here from harbinger so `wazabin_binary` stays a leaf below `qcode`.
3
4use std::fmt;
5
6// 100 first ELF values and larger ones supported
7// by the Linux kernel
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10pub enum Arch {
11    M32,
12    Sparc,
13    I386,
14    M68K,
15    M88K,
16    I860,
17    Mips,
18    S370,
19    MipsRs3Le,
20    PaRisc,
21    Vpp500,
22    Sparc32Plus,
23    I960,
24    Ppc,
25    Ppc64,
26    S390,
27    V800,
28    Fr20,
29    Rh32,
30    Rce,
31    Arm,
32    Alpha,
33    Sh,
34    SparcV9,
35    Tricore,
36    Arc,
37    H8300,
38    H8300H,
39    H8S,
40    H8500,
41    Ia64,
42    MipsX,
43    ColdFire,
44    M68Hc12,
45    Mma,
46    Pcp,
47    Ncpu,
48    Ndr1,
49    StarCore,
50    Me16,
51    St100,
52    TinyJ,
53    X86_64,
54    Pdsp,
55    Pdp10,
56    Pdp11,
57    Fx66,
58    St9Plus,
59    St7,
60    M68Hc16,
61    M68Hc11,
62    M68Hc08,
63    M68Hc05,
64    Svx,
65    St19,
66    Vax,
67    Cris,
68    Javelin,
69    FirePath,
70    Zsp,
71    Mmix,
72    Huany,
73    Prism,
74    Avr,
75    Fr30,
76    D10V,
77    D30V,
78    V850,
79    M32R,
80    Mn10300,
81    Mn10200,
82    PicoJava,
83    OpenRisc,
84    ArcA5,
85    Xtensa,
86    VideoCore,
87    TmmGpp,
88    Ns32K,
89    Tpc,
90    Snp1K,
91    St200,
92    Blackfin,
93    Unicore,
94    AlteraNios2,
95    TIC6000,
96    Hexagon,
97    NDS32,
98    AArch64,
99    TILEPro,
100    Microblaze,
101    TILEGx,
102    ARCv2,
103    RISCV,
104    BPF,
105    CSKY,
106    LoongArch,
107    FRV,
108}
109
110impl fmt::Display for Arch {
111    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
112        let desc = match self {
113            Self::M32 => "AT&T WE 32100",
114            Self::Sparc => "SPARC",
115            Self::I386 => "Intel 80386",
116            Self::M68K => "Motorola 68000",
117            Self::M88K => "Motorola 88000",
118            Self::I860 => "Intel 80860",
119            Self::Mips => "MIPS I Architecture",
120            Self::S370 => "IBM System/370 Processor",
121            Self::MipsRs3Le => "MIPS RS3000 Little-endian",
122            Self::PaRisc => "Hewlett-Packard PA-RISC",
123            Self::Vpp500 => "Fujitsu VPP500",
124            Self::Sparc32Plus => "Enhanced instruction set SPARC",
125            Self::I960 => "Intel 80960",
126            Self::Ppc => "PowerPC",
127            Self::Ppc64 => "64-bit PowerPC",
128            Self::S390 => "IBM System/390 Processor",
129            Self::V800 => "NEC V800",
130            Self::Fr20 => "Fujitsu FR20",
131            Self::Rh32 => "TRW RH-32",
132            Self::Rce => "Motorola RCE",
133            Self::Arm => "Advanced RISC Machines ARM",
134            Self::Alpha => "Digital Alpha",
135            Self::Sh => "Hitachi SH",
136            Self::SparcV9 => "SPARC Version 9",
137            Self::Tricore => "Siemens TriCore embedded processor",
138            Self::Arc => "Argonaut RISC Core, Argonaut Technologies Inc.",
139            Self::H8300 => "Hitachi H8/300",
140            Self::H8300H => "Hitachi H8/300H",
141            Self::H8S => "Hitachi H8S",
142            Self::H8500 => "Hitachi H8/500",
143            Self::Ia64 => "Intel IA-64 processor architecture",
144            Self::MipsX => "Stanford MIPS-X",
145            Self::ColdFire => "Motorola ColdFire",
146            Self::M68Hc12 => "Motorola M68HC12",
147            Self::Mma => "Fujitsu MMA Multimedia Accelerator",
148            Self::Pcp => "Siemens PCP",
149            Self::Ncpu => "Sony nCPU embedded RISC processor",
150            Self::Ndr1 => "Denso NDR1 microprocessor",
151            Self::StarCore => "Motorola Star*Core processor",
152            Self::Me16 => "Toyota ME16 processor",
153            Self::St100 => "STMicroelectronics ST100 processor",
154            Self::TinyJ => "Advanced Logic Corp. TinyJ embedded processor family",
155            Self::X86_64 => "AMD x86-64 architecture",
156            Self::Pdsp => "Sony DSP Processor",
157            Self::Pdp10 => "Digital Equipment Corp. PDP-10",
158            Self::Pdp11 => "Digital Equipment Corp. PDP-11",
159            Self::Fx66 => "Siemens FX66 microcontroller",
160            Self::St9Plus => "STMicroelectronics ST9+ 8/16 bit microcontroller",
161            Self::St7 => "STMicroelectronics ST7 8-bit microcontroller",
162            Self::M68Hc16 => "Motorola MC68HC16 Microcontroller",
163            Self::M68Hc11 => "Motorola MC68HC11 Microcontroller",
164            Self::M68Hc08 => "Motorola MC68HC08 Microcontroller",
165            Self::M68Hc05 => "Motorola MC68HC05 Microcontroller",
166            Self::Svx => "Silicon Graphics SVx",
167            Self::St19 => "STMicroelectronics ST19 8-bit microcontroller",
168            Self::Vax => "Digital VAX",
169            Self::Cris => "Axis Communications 32-bit embedded processor",
170            Self::Javelin => "Infineon Technologies 32-bit embedded processor",
171            Self::FirePath => "Element 14 64-bit DSP Processor",
172            Self::Zsp => "LSI Logic 16-bit DSP Processor",
173            Self::Mmix => "Donald Knuth's educational 64-bit processor",
174            Self::Huany => "Harvard University machine-independent object files",
175            Self::Prism => "SiTera Prism",
176            Self::Avr => "Atmel AVR 8-bit microcontroller",
177            Self::Fr30 => "Fujitsu FR30",
178            Self::D10V => "Mitsubishi D10V",
179            Self::D30V => "Mitsubishi D30V",
180            Self::V850 => "NEC v850",
181            Self::M32R => "Mitsubishi M32R",
182            Self::Mn10300 => "Matsushita MN10300",
183            Self::Mn10200 => "Matsushita MN10200",
184            Self::PicoJava => "picoJava",
185            Self::OpenRisc => "OpenRISC 32-bit embedded processor",
186            Self::ArcA5 => "ARC Cores Tangent-A5",
187            Self::Xtensa => "Tensilica Xtensa Architecture",
188            Self::VideoCore => "Alphamosaic VideoCore processor",
189            Self::TmmGpp => "Thompson Multimedia General Purpose Processor",
190            Self::Ns32K => "National Semiconductor 32000 series",
191            Self::Tpc => "Tenor Network TPC processor",
192            Self::Snp1K => "Trebia SNP 1000 processor",
193            Self::St200 => "STMicroelectronics ST200 microcontroller",
194            Self::Blackfin => "ADI Blackfin Processor",
195            Self::Unicore => "UniCore-32",
196            Self::AlteraNios2 => "Altera Nios II soft-core processor",
197            Self::TIC6000 => "TI C6X DSPs",
198            Self::Hexagon => "QUALCOMM Hexagon",
199            Self::NDS32 => "Andes Technology compact code size embedded RISC processor family",
200            Self::AArch64 => "ARM 64 bit",
201            Self::TILEPro => "Tilera TILEPro",
202            Self::Microblaze => "Xilinx MicroBlaze",
203            Self::TILEGx => "Tilera TILE-Gx",
204            Self::ARCv2 => "ARCv2 Cores",
205            Self::RISCV => "RISC-V",
206            Self::BPF => "Linux BPF - in-kernel virtual machine",
207            Self::CSKY => "C-SKY",
208            Self::LoongArch => "LoongArch",
209            Self::FRV => "Fujitsu FR-V",
210        };
211        f.write_str(desc)
212    }
213}