elf_utilities/header/
machine.rs

1use crate::*;
2
3#[derive(Debug, Eq, Ord, PartialEq, PartialOrd)]
4pub enum Machine {
5    // No machine
6    None,
7    // AT&T WE 32100
8    M32,
9    // SUN SPARC
10    SPARC,
11    // Intel 80386
12    Intel386,
13    // Motorola m68k family
14    M68K,
15    // Motorola m88k family
16    M88K,
17    // Intel MCU
18    IntelMCU,
19    // Intel 80860
20    Intel80860,
21    // MIPS R3000 big-endian
22    MIPS,
23    // IBM System/370
24    S370,
25    // MIPS R3000 little-endian
26    MIPSRS3LE,
27
28    // reserved 11-14
29
30    // HPPA
31    Parisc,
32    // Fujitsu VPP500
33    VPP500,
34    // Sun's "v8plus"
35    SPARC32Plus,
36    // Intel 80960
37    Intel80960,
38    // PowerPC
39    PowerPC,
40    // PowerPC 64-bit
41    PowerPC65,
42    // IBM S390
43    S390,
44    // IBM SPU/SPC
45    SPU,
46
47    // reserved 24-35
48
49    // NEC V700 series
50    V800,
51    // Fujitsu FR20
52    FR20,
53    // TRW RH-32
54    RH32,
55    // Motorola RCE
56    RCE,
57    // ARM
58    Arm,
59    // Digital Alpha
60    FakeAlpha,
61    // Hitachi SH
62    EMSH,
63    // SPARC v9 64-bit
64    EMSPARCV9,
65    // Siemens Tricore
66    Tricore,
67    // Argonaut RISC Core
68    ARC,
69    // Hitachi H8/300
70    H8300,
71    // Hitachi H8/300H
72    H8300H,
73    // Hitachi H8S
74    H8S,
75    // Hitachi H8/500
76    H8500,
77    // Stanford MIPS-X
78    MIPSX,
79    // Motorola Coldfire
80    Coldfire,
81    // Motorola M68HC12
82    M68HC12,
83    // Fujitsu MMA Multimedia Accelerator
84    MMA,
85    // Siemens PCP
86    PCP,
87    // Sony nCPU embedded RISC
88    NCPU,
89    // Denso NDR1 microprocessor
90    NDR1,
91    // Motorola Start*Core processor
92    StarCore,
93    // Toyota ME16 processor
94    ME16,
95    // STMicroelectronic ST100 processor
96    ST100,
97    // Advanced Logic Corp. TinyJ embedded processor
98    TinyJ,
99    // Advanced Micro Devices X86-64 processor
100    X8664,
101    // Sony DSP Processor
102    PSDP,
103    // Digital Equipment Corp. PDP-10
104    PDP10,
105    // Digital Equipment Corp. PDP-11
106    PDP11,
107    // Siemens FX66 microcontroller
108    FX66,
109    // STMicroelectronics ST9+ 8/16 bit microcontroller
110    ST9Plus,
111    // STMicroelectronics ST7 8-bit microcontroller
112    ST7,
113    // Motorola MC68HC16 Microcontroller
114    MC68HC16,
115    // Motorola MC68HC11 Microcontroller
116    MC68HC11,
117    // Motorola MC68HC08 Microcontroller
118    MC68HC08,
119    // Motorola MC68HC05 Microcontroller
120    MC68HC05,
121    // Silicon Graphics SVx
122    SVx,
123    // STMicroelectronics ST19 8-bit cpu
124    ST19,
125    // Digital VAX
126    VAX,
127    // Axis Communications 32-bit embedded processor
128    CRIS,
129    // Infineon Technologies 32-bit embedded cpu
130    Javelin,
131    // Element 14 64-bit DSP processor
132    Firepath,
133    // LSI Logic's 16-bit DSP processor
134    ZSP,
135    // Donald Knuth's educational 64-bit processor
136    MMIX,
137    // Harvard's machine-independent format
138    HUANY,
139    // SiTera Prism
140    Prism,
141    // Atmel AVR 8-bit microcontroller
142    AVR,
143    // Fujitsu FR30
144    FR30,
145    // Mitsubishi D10V
146    D10V,
147    // Mitsubishi D30V
148    D30V,
149    // Renesas V850 (formerly NEC V850)
150    V850,
151    // Renesas M32R (formerly Mitsubishi M32R)
152    M32R,
153    // Matsushita MN10300
154    MN10300,
155    // Matsushita MN10200
156    MN10200,
157    // picoJava
158    PicoJava,
159    // OpenRISC 1000 32-bit embedded processor
160    OR1K,
161    // ARC International ARCompact processor
162    ARCompact,
163    // Tensilica Xtensa Architecture
164    Xtensa,
165    // Old Sunplus S+core7 backend magic number.
166    // Written in the absence of an ABI.
167    SCoreOld,
168    // Alphamosaic VideoCore processor
169    VideoCore,
170    // Thompson Multimedia General Purpose Processor
171    TMMGPP,
172    // National Semiconductor 32000 series
173    NS32K,
174    // Tenor Network TPC processor
175    TPC,
176    // Old value for picoJava. Deprecated.
177    PicoJavaOld,
178    // Trebia SNP 1000 processor
179    SNP1K,
180    // STMicroelectronics ST200 microcontroller
181    ST200,
182    Any(Elf64Half),
183}
184
185impl Machine {
186    pub fn to_bytes(&self) -> Elf64Half {
187        match self {
188            Self::X8664 => 62,
189            Self::Any(c) => *c,
190            _ => panic!("not implemented -> {:?}", self),
191        }
192    }
193}
194
195impl From<Elf64Half> for Machine {
196    fn from(bytes: Elf64Half) -> Self {
197        match bytes {
198            62 => Self::X8664,
199            _ => Self::Any(bytes),
200        }
201    }
202}