1*5f7ddb14SDimitry Andric //===- llvm/BinaryFormat/ELF.cpp - The ELF format ---------------*- C++ -*-===//
2*5f7ddb14SDimitry Andric //
3*5f7ddb14SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*5f7ddb14SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*5f7ddb14SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*5f7ddb14SDimitry Andric //
7*5f7ddb14SDimitry Andric //===----------------------------------------------------------------------===//
8*5f7ddb14SDimitry Andric 
9*5f7ddb14SDimitry Andric #include "llvm/BinaryFormat/ELF.h"
10*5f7ddb14SDimitry Andric #include "llvm/ADT/DenseMap.h"
11*5f7ddb14SDimitry Andric #include "llvm/ADT/StringSwitch.h"
12*5f7ddb14SDimitry Andric #include "llvm/Support/Error.h"
13*5f7ddb14SDimitry Andric 
14*5f7ddb14SDimitry Andric using namespace llvm;
15*5f7ddb14SDimitry Andric using namespace ELF;
16*5f7ddb14SDimitry Andric 
17*5f7ddb14SDimitry Andric /// Convert an architecture name into ELF's e_machine value.
convertArchNameToEMachine(StringRef Arch)18*5f7ddb14SDimitry Andric uint16_t ELF::convertArchNameToEMachine(StringRef Arch) {
19*5f7ddb14SDimitry Andric   std::string LowerArch = Arch.lower();
20*5f7ddb14SDimitry Andric   return StringSwitch<uint16_t>(LowerArch)
21*5f7ddb14SDimitry Andric       .Case("none", EM_NONE)
22*5f7ddb14SDimitry Andric       .Case("m32", EM_M32)
23*5f7ddb14SDimitry Andric       .Case("sparc", EM_SPARC)
24*5f7ddb14SDimitry Andric       .Case("386", EM_386)
25*5f7ddb14SDimitry Andric       .Case("68k", EM_68K)
26*5f7ddb14SDimitry Andric       .Case("88k", EM_88K)
27*5f7ddb14SDimitry Andric       .Case("iamcu", EM_IAMCU)
28*5f7ddb14SDimitry Andric       .Case("860", EM_860)
29*5f7ddb14SDimitry Andric       .Case("mips", EM_MIPS)
30*5f7ddb14SDimitry Andric       .Case("s370", EM_S370)
31*5f7ddb14SDimitry Andric       .Case("mips_rs3_le", EM_MIPS_RS3_LE)
32*5f7ddb14SDimitry Andric       .Case("parisc", EM_PARISC)
33*5f7ddb14SDimitry Andric       .Case("vpp500", EM_VPP500)
34*5f7ddb14SDimitry Andric       .Case("sparc32plus", EM_SPARC32PLUS)
35*5f7ddb14SDimitry Andric       .Case("960", EM_960)
36*5f7ddb14SDimitry Andric       .Case("ppc", EM_PPC)
37*5f7ddb14SDimitry Andric       .Case("ppc64", EM_PPC64)
38*5f7ddb14SDimitry Andric       .Case("s390", EM_S390)
39*5f7ddb14SDimitry Andric       .Case("spu", EM_SPU)
40*5f7ddb14SDimitry Andric       .Case("v800", EM_V800)
41*5f7ddb14SDimitry Andric       .Case("fr20", EM_FR20)
42*5f7ddb14SDimitry Andric       .Case("rh32", EM_RH32)
43*5f7ddb14SDimitry Andric       .Case("rce", EM_RCE)
44*5f7ddb14SDimitry Andric       .Case("arm", EM_ARM)
45*5f7ddb14SDimitry Andric       .Case("alpha", EM_ALPHA)
46*5f7ddb14SDimitry Andric       .Case("sh", EM_SH)
47*5f7ddb14SDimitry Andric       .Case("sparcv9", EM_SPARCV9)
48*5f7ddb14SDimitry Andric       .Case("tricore", EM_TRICORE)
49*5f7ddb14SDimitry Andric       .Case("arc", EM_ARC)
50*5f7ddb14SDimitry Andric       .Case("h8_300", EM_H8_300)
51*5f7ddb14SDimitry Andric       .Case("h8_300h", EM_H8_300H)
52*5f7ddb14SDimitry Andric       .Case("h8s", EM_H8S)
53*5f7ddb14SDimitry Andric       .Case("h8_500", EM_H8_500)
54*5f7ddb14SDimitry Andric       .Case("ia_64", EM_IA_64)
55*5f7ddb14SDimitry Andric       .Case("mips_x", EM_MIPS_X)
56*5f7ddb14SDimitry Andric       .Case("coldfire", EM_COLDFIRE)
57*5f7ddb14SDimitry Andric       .Case("68hc12", EM_68HC12)
58*5f7ddb14SDimitry Andric       .Case("mma", EM_MMA)
59*5f7ddb14SDimitry Andric       .Case("pcp", EM_PCP)
60*5f7ddb14SDimitry Andric       .Case("ncpu", EM_NCPU)
61*5f7ddb14SDimitry Andric       .Case("ndr1", EM_NDR1)
62*5f7ddb14SDimitry Andric       .Case("starcore", EM_STARCORE)
63*5f7ddb14SDimitry Andric       .Case("me16", EM_ME16)
64*5f7ddb14SDimitry Andric       .Case("st100", EM_ST100)
65*5f7ddb14SDimitry Andric       .Case("tinyj", EM_TINYJ)
66*5f7ddb14SDimitry Andric       .Case("x86_64", EM_X86_64)
67*5f7ddb14SDimitry Andric       .Case("pdsp", EM_PDSP)
68*5f7ddb14SDimitry Andric       .Case("pdp10", EM_PDP10)
69*5f7ddb14SDimitry Andric       .Case("pdp11", EM_PDP11)
70*5f7ddb14SDimitry Andric       .Case("fx66", EM_FX66)
71*5f7ddb14SDimitry Andric       .Case("st9plus", EM_ST9PLUS)
72*5f7ddb14SDimitry Andric       .Case("st7", EM_ST7)
73*5f7ddb14SDimitry Andric       .Case("68hc16", EM_68HC16)
74*5f7ddb14SDimitry Andric       .Case("68hc11", EM_68HC11)
75*5f7ddb14SDimitry Andric       .Case("68hc08", EM_68HC08)
76*5f7ddb14SDimitry Andric       .Case("68hc05", EM_68HC05)
77*5f7ddb14SDimitry Andric       .Case("svx", EM_SVX)
78*5f7ddb14SDimitry Andric       .Case("st19", EM_ST19)
79*5f7ddb14SDimitry Andric       .Case("vax", EM_VAX)
80*5f7ddb14SDimitry Andric       .Case("cris", EM_CRIS)
81*5f7ddb14SDimitry Andric       .Case("javelin", EM_JAVELIN)
82*5f7ddb14SDimitry Andric       .Case("firepath", EM_FIREPATH)
83*5f7ddb14SDimitry Andric       .Case("zsp", EM_ZSP)
84*5f7ddb14SDimitry Andric       .Case("mmix", EM_MMIX)
85*5f7ddb14SDimitry Andric       .Case("huany", EM_HUANY)
86*5f7ddb14SDimitry Andric       .Case("prism", EM_PRISM)
87*5f7ddb14SDimitry Andric       .Case("avr", EM_AVR)
88*5f7ddb14SDimitry Andric       .Case("fr30", EM_FR30)
89*5f7ddb14SDimitry Andric       .Case("d10v", EM_D10V)
90*5f7ddb14SDimitry Andric       .Case("d30v", EM_D30V)
91*5f7ddb14SDimitry Andric       .Case("v850", EM_V850)
92*5f7ddb14SDimitry Andric       .Case("m32r", EM_M32R)
93*5f7ddb14SDimitry Andric       .Case("mn10300", EM_MN10300)
94*5f7ddb14SDimitry Andric       .Case("mn10200", EM_MN10200)
95*5f7ddb14SDimitry Andric       .Case("pj", EM_PJ)
96*5f7ddb14SDimitry Andric       .Case("openrisc", EM_OPENRISC)
97*5f7ddb14SDimitry Andric       .Case("arc_compact", EM_ARC_COMPACT)
98*5f7ddb14SDimitry Andric       .Case("xtensa", EM_XTENSA)
99*5f7ddb14SDimitry Andric       .Case("videocore", EM_VIDEOCORE)
100*5f7ddb14SDimitry Andric       .Case("tmm_gpp", EM_TMM_GPP)
101*5f7ddb14SDimitry Andric       .Case("ns32k", EM_NS32K)
102*5f7ddb14SDimitry Andric       .Case("tpc", EM_TPC)
103*5f7ddb14SDimitry Andric       .Case("snp1k", EM_SNP1K)
104*5f7ddb14SDimitry Andric       .Case("st200", EM_ST200)
105*5f7ddb14SDimitry Andric       .Case("ip2k", EM_IP2K)
106*5f7ddb14SDimitry Andric       .Case("max", EM_MAX)
107*5f7ddb14SDimitry Andric       .Case("cr", EM_CR)
108*5f7ddb14SDimitry Andric       .Case("f2mc16", EM_F2MC16)
109*5f7ddb14SDimitry Andric       .Case("msp430", EM_MSP430)
110*5f7ddb14SDimitry Andric       .Case("blackfin", EM_BLACKFIN)
111*5f7ddb14SDimitry Andric       .Case("se_c33", EM_SE_C33)
112*5f7ddb14SDimitry Andric       .Case("sep", EM_SEP)
113*5f7ddb14SDimitry Andric       .Case("arca", EM_ARCA)
114*5f7ddb14SDimitry Andric       .Case("unicore", EM_UNICORE)
115*5f7ddb14SDimitry Andric       .Case("excess", EM_EXCESS)
116*5f7ddb14SDimitry Andric       .Case("dxp", EM_DXP)
117*5f7ddb14SDimitry Andric       .Case("altera_nios2", EM_ALTERA_NIOS2)
118*5f7ddb14SDimitry Andric       .Case("crx", EM_CRX)
119*5f7ddb14SDimitry Andric       .Case("xgate", EM_XGATE)
120*5f7ddb14SDimitry Andric       .Case("c166", EM_C166)
121*5f7ddb14SDimitry Andric       .Case("m16c", EM_M16C)
122*5f7ddb14SDimitry Andric       .Case("dspic30f", EM_DSPIC30F)
123*5f7ddb14SDimitry Andric       .Case("ce", EM_CE)
124*5f7ddb14SDimitry Andric       .Case("m32c", EM_M32C)
125*5f7ddb14SDimitry Andric       .Case("tsk3000", EM_TSK3000)
126*5f7ddb14SDimitry Andric       .Case("rs08", EM_RS08)
127*5f7ddb14SDimitry Andric       .Case("sharc", EM_SHARC)
128*5f7ddb14SDimitry Andric       .Case("ecog2", EM_ECOG2)
129*5f7ddb14SDimitry Andric       .Case("score7", EM_SCORE7)
130*5f7ddb14SDimitry Andric       .Case("dsp24", EM_DSP24)
131*5f7ddb14SDimitry Andric       .Case("videocore3", EM_VIDEOCORE3)
132*5f7ddb14SDimitry Andric       .Case("latticemico32", EM_LATTICEMICO32)
133*5f7ddb14SDimitry Andric       .Case("se_c17", EM_SE_C17)
134*5f7ddb14SDimitry Andric       .Case("ti_c6000", EM_TI_C6000)
135*5f7ddb14SDimitry Andric       .Case("ti_c2000", EM_TI_C2000)
136*5f7ddb14SDimitry Andric       .Case("ti_c5500", EM_TI_C5500)
137*5f7ddb14SDimitry Andric       .Case("mmdsp_plus", EM_MMDSP_PLUS)
138*5f7ddb14SDimitry Andric       .Case("cypress_m8c", EM_CYPRESS_M8C)
139*5f7ddb14SDimitry Andric       .Case("r32c", EM_R32C)
140*5f7ddb14SDimitry Andric       .Case("trimedia", EM_TRIMEDIA)
141*5f7ddb14SDimitry Andric       .Case("hexagon", EM_HEXAGON)
142*5f7ddb14SDimitry Andric       .Case("8051", EM_8051)
143*5f7ddb14SDimitry Andric       .Case("stxp7x", EM_STXP7X)
144*5f7ddb14SDimitry Andric       .Case("nds32", EM_NDS32)
145*5f7ddb14SDimitry Andric       .Case("ecog1", EM_ECOG1)
146*5f7ddb14SDimitry Andric       .Case("ecog1x", EM_ECOG1X)
147*5f7ddb14SDimitry Andric       .Case("maxq30", EM_MAXQ30)
148*5f7ddb14SDimitry Andric       .Case("ximo16", EM_XIMO16)
149*5f7ddb14SDimitry Andric       .Case("manik", EM_MANIK)
150*5f7ddb14SDimitry Andric       .Case("craynv2", EM_CRAYNV2)
151*5f7ddb14SDimitry Andric       .Case("rx", EM_RX)
152*5f7ddb14SDimitry Andric       .Case("metag", EM_METAG)
153*5f7ddb14SDimitry Andric       .Case("mcst_elbrus", EM_MCST_ELBRUS)
154*5f7ddb14SDimitry Andric       .Case("ecog16", EM_ECOG16)
155*5f7ddb14SDimitry Andric       .Case("cr16", EM_CR16)
156*5f7ddb14SDimitry Andric       .Case("etpu", EM_ETPU)
157*5f7ddb14SDimitry Andric       .Case("sle9x", EM_SLE9X)
158*5f7ddb14SDimitry Andric       .Case("l10m", EM_L10M)
159*5f7ddb14SDimitry Andric       .Case("k10m", EM_K10M)
160*5f7ddb14SDimitry Andric       .Case("aarch64", EM_AARCH64)
161*5f7ddb14SDimitry Andric       .Case("avr32", EM_AVR32)
162*5f7ddb14SDimitry Andric       .Case("stm8", EM_STM8)
163*5f7ddb14SDimitry Andric       .Case("tile64", EM_TILE64)
164*5f7ddb14SDimitry Andric       .Case("tilepro", EM_TILEPRO)
165*5f7ddb14SDimitry Andric       .Case("cuda", EM_CUDA)
166*5f7ddb14SDimitry Andric       .Case("tilegx", EM_TILEGX)
167*5f7ddb14SDimitry Andric       .Case("cloudshield", EM_CLOUDSHIELD)
168*5f7ddb14SDimitry Andric       .Case("corea_1st", EM_COREA_1ST)
169*5f7ddb14SDimitry Andric       .Case("corea_2nd", EM_COREA_2ND)
170*5f7ddb14SDimitry Andric       .Case("arc_compact2", EM_ARC_COMPACT2)
171*5f7ddb14SDimitry Andric       .Case("open8", EM_OPEN8)
172*5f7ddb14SDimitry Andric       .Case("rl78", EM_RL78)
173*5f7ddb14SDimitry Andric       .Case("videocore5", EM_VIDEOCORE5)
174*5f7ddb14SDimitry Andric       .Case("78kor", EM_78KOR)
175*5f7ddb14SDimitry Andric       .Case("56800ex", EM_56800EX)
176*5f7ddb14SDimitry Andric       .Case("ba1", EM_BA1)
177*5f7ddb14SDimitry Andric       .Case("ba2", EM_BA2)
178*5f7ddb14SDimitry Andric       .Case("xcore", EM_XCORE)
179*5f7ddb14SDimitry Andric       .Case("mchp_pic", EM_MCHP_PIC)
180*5f7ddb14SDimitry Andric       .Case("intel205", EM_INTEL205)
181*5f7ddb14SDimitry Andric       .Case("intel206", EM_INTEL206)
182*5f7ddb14SDimitry Andric       .Case("intel207", EM_INTEL207)
183*5f7ddb14SDimitry Andric       .Case("intel208", EM_INTEL208)
184*5f7ddb14SDimitry Andric       .Case("intel209", EM_INTEL209)
185*5f7ddb14SDimitry Andric       .Case("km32", EM_KM32)
186*5f7ddb14SDimitry Andric       .Case("kmx32", EM_KMX32)
187*5f7ddb14SDimitry Andric       .Case("kmx16", EM_KMX16)
188*5f7ddb14SDimitry Andric       .Case("kmx8", EM_KMX8)
189*5f7ddb14SDimitry Andric       .Case("kvarc", EM_KVARC)
190*5f7ddb14SDimitry Andric       .Case("cdp", EM_CDP)
191*5f7ddb14SDimitry Andric       .Case("coge", EM_COGE)
192*5f7ddb14SDimitry Andric       .Case("cool", EM_COOL)
193*5f7ddb14SDimitry Andric       .Case("norc", EM_NORC)
194*5f7ddb14SDimitry Andric       .Case("csr_kalimba", EM_CSR_KALIMBA)
195*5f7ddb14SDimitry Andric       .Case("amdgpu", EM_AMDGPU)
196*5f7ddb14SDimitry Andric       .Case("riscv", EM_RISCV)
197*5f7ddb14SDimitry Andric       .Case("lanai", EM_LANAI)
198*5f7ddb14SDimitry Andric       .Case("bpf", EM_BPF)
199*5f7ddb14SDimitry Andric       .Case("ve", EM_VE)
200*5f7ddb14SDimitry Andric       .Case("csky", EM_CSKY)
201*5f7ddb14SDimitry Andric       .Default(EM_NONE);
202*5f7ddb14SDimitry Andric }
203*5f7ddb14SDimitry Andric 
204*5f7ddb14SDimitry Andric /// Convert an ELF's e_machine value into an architecture name.
convertEMachineToArchName(uint16_t EMachine)205*5f7ddb14SDimitry Andric StringRef ELF::convertEMachineToArchName(uint16_t EMachine) {
206*5f7ddb14SDimitry Andric   switch (EMachine) {
207*5f7ddb14SDimitry Andric   case EM_NONE:
208*5f7ddb14SDimitry Andric     return "None";
209*5f7ddb14SDimitry Andric   case EM_M32:
210*5f7ddb14SDimitry Andric     return "m32";
211*5f7ddb14SDimitry Andric   case EM_SPARC:
212*5f7ddb14SDimitry Andric     return "sparc";
213*5f7ddb14SDimitry Andric   case EM_386:
214*5f7ddb14SDimitry Andric     return "386";
215*5f7ddb14SDimitry Andric   case EM_68K:
216*5f7ddb14SDimitry Andric     return "68k";
217*5f7ddb14SDimitry Andric   case EM_88K:
218*5f7ddb14SDimitry Andric     return "88k";
219*5f7ddb14SDimitry Andric   case EM_IAMCU:
220*5f7ddb14SDimitry Andric     return "iamcu";
221*5f7ddb14SDimitry Andric   case EM_860:
222*5f7ddb14SDimitry Andric     return "860";
223*5f7ddb14SDimitry Andric   case EM_MIPS:
224*5f7ddb14SDimitry Andric     return "mips";
225*5f7ddb14SDimitry Andric   case EM_S370:
226*5f7ddb14SDimitry Andric     return "s370";
227*5f7ddb14SDimitry Andric   case EM_MIPS_RS3_LE:
228*5f7ddb14SDimitry Andric     return "mips_rs3_le";
229*5f7ddb14SDimitry Andric   case EM_PARISC:
230*5f7ddb14SDimitry Andric     return "parisc";
231*5f7ddb14SDimitry Andric   case EM_VPP500:
232*5f7ddb14SDimitry Andric     return "vpp500";
233*5f7ddb14SDimitry Andric   case EM_SPARC32PLUS:
234*5f7ddb14SDimitry Andric     return "sparc32plus";
235*5f7ddb14SDimitry Andric   case EM_960:
236*5f7ddb14SDimitry Andric     return "960";
237*5f7ddb14SDimitry Andric   case EM_PPC:
238*5f7ddb14SDimitry Andric     return "ppc";
239*5f7ddb14SDimitry Andric   case EM_PPC64:
240*5f7ddb14SDimitry Andric     return "ppc64";
241*5f7ddb14SDimitry Andric   case EM_S390:
242*5f7ddb14SDimitry Andric     return "s390";
243*5f7ddb14SDimitry Andric   case EM_SPU:
244*5f7ddb14SDimitry Andric     return "spu";
245*5f7ddb14SDimitry Andric   case EM_V800:
246*5f7ddb14SDimitry Andric     return "v800";
247*5f7ddb14SDimitry Andric   case EM_FR20:
248*5f7ddb14SDimitry Andric     return "fr20";
249*5f7ddb14SDimitry Andric   case EM_RH32:
250*5f7ddb14SDimitry Andric     return "rh32";
251*5f7ddb14SDimitry Andric   case EM_RCE:
252*5f7ddb14SDimitry Andric     return "rce";
253*5f7ddb14SDimitry Andric   case EM_ARM:
254*5f7ddb14SDimitry Andric     return "arm";
255*5f7ddb14SDimitry Andric   case EM_ALPHA:
256*5f7ddb14SDimitry Andric     return "alpha";
257*5f7ddb14SDimitry Andric   case EM_SH:
258*5f7ddb14SDimitry Andric     return "sh";
259*5f7ddb14SDimitry Andric   case EM_SPARCV9:
260*5f7ddb14SDimitry Andric     return "sparcv9";
261*5f7ddb14SDimitry Andric   case EM_TRICORE:
262*5f7ddb14SDimitry Andric     return "tricore";
263*5f7ddb14SDimitry Andric   case EM_ARC:
264*5f7ddb14SDimitry Andric     return "arc";
265*5f7ddb14SDimitry Andric   case EM_H8_300:
266*5f7ddb14SDimitry Andric     return "h8_300";
267*5f7ddb14SDimitry Andric   case EM_H8_300H:
268*5f7ddb14SDimitry Andric     return "h8_300h";
269*5f7ddb14SDimitry Andric   case EM_H8S:
270*5f7ddb14SDimitry Andric     return "h8s";
271*5f7ddb14SDimitry Andric   case EM_H8_500:
272*5f7ddb14SDimitry Andric     return "h8_500";
273*5f7ddb14SDimitry Andric   case EM_IA_64:
274*5f7ddb14SDimitry Andric     return "ia_64";
275*5f7ddb14SDimitry Andric   case EM_MIPS_X:
276*5f7ddb14SDimitry Andric     return "mips_x";
277*5f7ddb14SDimitry Andric   case EM_COLDFIRE:
278*5f7ddb14SDimitry Andric     return "coldfire";
279*5f7ddb14SDimitry Andric   case EM_68HC12:
280*5f7ddb14SDimitry Andric     return "68hc12";
281*5f7ddb14SDimitry Andric   case EM_MMA:
282*5f7ddb14SDimitry Andric     return "mma";
283*5f7ddb14SDimitry Andric   case EM_PCP:
284*5f7ddb14SDimitry Andric     return "pcp";
285*5f7ddb14SDimitry Andric   case EM_NCPU:
286*5f7ddb14SDimitry Andric     return "ncpu";
287*5f7ddb14SDimitry Andric   case EM_NDR1:
288*5f7ddb14SDimitry Andric     return "ndr1";
289*5f7ddb14SDimitry Andric   case EM_STARCORE:
290*5f7ddb14SDimitry Andric     return "starcore";
291*5f7ddb14SDimitry Andric   case EM_ME16:
292*5f7ddb14SDimitry Andric     return "me16";
293*5f7ddb14SDimitry Andric   case EM_ST100:
294*5f7ddb14SDimitry Andric     return "st100";
295*5f7ddb14SDimitry Andric   case EM_TINYJ:
296*5f7ddb14SDimitry Andric     return "tinyj";
297*5f7ddb14SDimitry Andric   case EM_X86_64:
298*5f7ddb14SDimitry Andric     return "x86_64";
299*5f7ddb14SDimitry Andric   case EM_PDSP:
300*5f7ddb14SDimitry Andric     return "pdsp";
301*5f7ddb14SDimitry Andric   case EM_PDP10:
302*5f7ddb14SDimitry Andric     return "pdp10";
303*5f7ddb14SDimitry Andric   case EM_PDP11:
304*5f7ddb14SDimitry Andric     return "pdp11";
305*5f7ddb14SDimitry Andric   case EM_FX66:
306*5f7ddb14SDimitry Andric     return "fx66";
307*5f7ddb14SDimitry Andric   case EM_ST9PLUS:
308*5f7ddb14SDimitry Andric     return "st9plus";
309*5f7ddb14SDimitry Andric   case EM_ST7:
310*5f7ddb14SDimitry Andric     return "st7";
311*5f7ddb14SDimitry Andric   case EM_68HC16:
312*5f7ddb14SDimitry Andric     return "68hc16";
313*5f7ddb14SDimitry Andric   case EM_68HC11:
314*5f7ddb14SDimitry Andric     return "68hc11";
315*5f7ddb14SDimitry Andric   case EM_68HC08:
316*5f7ddb14SDimitry Andric     return "68hc08";
317*5f7ddb14SDimitry Andric   case EM_68HC05:
318*5f7ddb14SDimitry Andric     return "68hc05";
319*5f7ddb14SDimitry Andric   case EM_SVX:
320*5f7ddb14SDimitry Andric     return "svx";
321*5f7ddb14SDimitry Andric   case EM_ST19:
322*5f7ddb14SDimitry Andric     return "st19";
323*5f7ddb14SDimitry Andric   case EM_VAX:
324*5f7ddb14SDimitry Andric     return "vax";
325*5f7ddb14SDimitry Andric   case EM_CRIS:
326*5f7ddb14SDimitry Andric     return "cris";
327*5f7ddb14SDimitry Andric   case EM_JAVELIN:
328*5f7ddb14SDimitry Andric     return "javelin";
329*5f7ddb14SDimitry Andric   case EM_FIREPATH:
330*5f7ddb14SDimitry Andric     return "firepath";
331*5f7ddb14SDimitry Andric   case EM_ZSP:
332*5f7ddb14SDimitry Andric     return "zsp";
333*5f7ddb14SDimitry Andric   case EM_MMIX:
334*5f7ddb14SDimitry Andric     return "mmix";
335*5f7ddb14SDimitry Andric   case EM_HUANY:
336*5f7ddb14SDimitry Andric     return "huany";
337*5f7ddb14SDimitry Andric   case EM_PRISM:
338*5f7ddb14SDimitry Andric     return "prism";
339*5f7ddb14SDimitry Andric   case EM_AVR:
340*5f7ddb14SDimitry Andric     return "avr";
341*5f7ddb14SDimitry Andric   case EM_FR30:
342*5f7ddb14SDimitry Andric     return "fr30";
343*5f7ddb14SDimitry Andric   case EM_D10V:
344*5f7ddb14SDimitry Andric     return "d10v";
345*5f7ddb14SDimitry Andric   case EM_D30V:
346*5f7ddb14SDimitry Andric     return "d30v";
347*5f7ddb14SDimitry Andric   case EM_V850:
348*5f7ddb14SDimitry Andric     return "v850";
349*5f7ddb14SDimitry Andric   case EM_M32R:
350*5f7ddb14SDimitry Andric     return "m32r";
351*5f7ddb14SDimitry Andric   case EM_MN10300:
352*5f7ddb14SDimitry Andric     return "mn10300";
353*5f7ddb14SDimitry Andric   case EM_MN10200:
354*5f7ddb14SDimitry Andric     return "mn10200";
355*5f7ddb14SDimitry Andric   case EM_PJ:
356*5f7ddb14SDimitry Andric     return "pj";
357*5f7ddb14SDimitry Andric   case EM_OPENRISC:
358*5f7ddb14SDimitry Andric     return "openrisc";
359*5f7ddb14SDimitry Andric   case EM_ARC_COMPACT:
360*5f7ddb14SDimitry Andric     return "arc_compact";
361*5f7ddb14SDimitry Andric   case EM_XTENSA:
362*5f7ddb14SDimitry Andric     return "xtensa";
363*5f7ddb14SDimitry Andric   case EM_VIDEOCORE:
364*5f7ddb14SDimitry Andric     return "videocore";
365*5f7ddb14SDimitry Andric   case EM_TMM_GPP:
366*5f7ddb14SDimitry Andric     return "tmm_gpp";
367*5f7ddb14SDimitry Andric   case EM_NS32K:
368*5f7ddb14SDimitry Andric     return "ns32k";
369*5f7ddb14SDimitry Andric   case EM_TPC:
370*5f7ddb14SDimitry Andric     return "tpc";
371*5f7ddb14SDimitry Andric   case EM_SNP1K:
372*5f7ddb14SDimitry Andric     return "snp1k";
373*5f7ddb14SDimitry Andric   case EM_ST200:
374*5f7ddb14SDimitry Andric     return "st200";
375*5f7ddb14SDimitry Andric   case EM_IP2K:
376*5f7ddb14SDimitry Andric     return "ip2k";
377*5f7ddb14SDimitry Andric   case EM_MAX:
378*5f7ddb14SDimitry Andric     return "max";
379*5f7ddb14SDimitry Andric   case EM_CR:
380*5f7ddb14SDimitry Andric     return "cr";
381*5f7ddb14SDimitry Andric   case EM_F2MC16:
382*5f7ddb14SDimitry Andric     return "f2mc16";
383*5f7ddb14SDimitry Andric   case EM_MSP430:
384*5f7ddb14SDimitry Andric     return "msp430";
385*5f7ddb14SDimitry Andric   case EM_BLACKFIN:
386*5f7ddb14SDimitry Andric     return "blackfin";
387*5f7ddb14SDimitry Andric   case EM_SE_C33:
388*5f7ddb14SDimitry Andric     return "se_c33";
389*5f7ddb14SDimitry Andric   case EM_SEP:
390*5f7ddb14SDimitry Andric     return "sep";
391*5f7ddb14SDimitry Andric   case EM_ARCA:
392*5f7ddb14SDimitry Andric     return "arca";
393*5f7ddb14SDimitry Andric   case EM_UNICORE:
394*5f7ddb14SDimitry Andric     return "unicore";
395*5f7ddb14SDimitry Andric   case EM_EXCESS:
396*5f7ddb14SDimitry Andric     return "excess";
397*5f7ddb14SDimitry Andric   case EM_DXP:
398*5f7ddb14SDimitry Andric     return "dxp";
399*5f7ddb14SDimitry Andric   case EM_ALTERA_NIOS2:
400*5f7ddb14SDimitry Andric     return "altera_nios2";
401*5f7ddb14SDimitry Andric   case EM_CRX:
402*5f7ddb14SDimitry Andric     return "crx";
403*5f7ddb14SDimitry Andric   case EM_XGATE:
404*5f7ddb14SDimitry Andric     return "xgate";
405*5f7ddb14SDimitry Andric   case EM_C166:
406*5f7ddb14SDimitry Andric     return "c166";
407*5f7ddb14SDimitry Andric   case EM_M16C:
408*5f7ddb14SDimitry Andric     return "m16c";
409*5f7ddb14SDimitry Andric   case EM_DSPIC30F:
410*5f7ddb14SDimitry Andric     return "dspic30f";
411*5f7ddb14SDimitry Andric   case EM_CE:
412*5f7ddb14SDimitry Andric     return "ce";
413*5f7ddb14SDimitry Andric   case EM_M32C:
414*5f7ddb14SDimitry Andric     return "m32c";
415*5f7ddb14SDimitry Andric   case EM_TSK3000:
416*5f7ddb14SDimitry Andric     return "tsk3000";
417*5f7ddb14SDimitry Andric   case EM_RS08:
418*5f7ddb14SDimitry Andric     return "rs08";
419*5f7ddb14SDimitry Andric   case EM_SHARC:
420*5f7ddb14SDimitry Andric     return "sharc";
421*5f7ddb14SDimitry Andric   case EM_ECOG2:
422*5f7ddb14SDimitry Andric     return "ecog2";
423*5f7ddb14SDimitry Andric   case EM_SCORE7:
424*5f7ddb14SDimitry Andric     return "score7";
425*5f7ddb14SDimitry Andric   case EM_DSP24:
426*5f7ddb14SDimitry Andric     return "dsp24";
427*5f7ddb14SDimitry Andric   case EM_VIDEOCORE3:
428*5f7ddb14SDimitry Andric     return "videocore3";
429*5f7ddb14SDimitry Andric   case EM_LATTICEMICO32:
430*5f7ddb14SDimitry Andric     return "latticemico32";
431*5f7ddb14SDimitry Andric   case EM_SE_C17:
432*5f7ddb14SDimitry Andric     return "se_c17";
433*5f7ddb14SDimitry Andric   case EM_TI_C6000:
434*5f7ddb14SDimitry Andric     return "ti_c6000";
435*5f7ddb14SDimitry Andric   case EM_TI_C2000:
436*5f7ddb14SDimitry Andric     return "ti_c2000";
437*5f7ddb14SDimitry Andric   case EM_TI_C5500:
438*5f7ddb14SDimitry Andric     return "ti_c5500";
439*5f7ddb14SDimitry Andric   case EM_MMDSP_PLUS:
440*5f7ddb14SDimitry Andric     return "mmdsp_plus";
441*5f7ddb14SDimitry Andric   case EM_CYPRESS_M8C:
442*5f7ddb14SDimitry Andric     return "cypress_m8c";
443*5f7ddb14SDimitry Andric   case EM_R32C:
444*5f7ddb14SDimitry Andric     return "r32c";
445*5f7ddb14SDimitry Andric   case EM_TRIMEDIA:
446*5f7ddb14SDimitry Andric     return "trimedia";
447*5f7ddb14SDimitry Andric   case EM_HEXAGON:
448*5f7ddb14SDimitry Andric     return "hexagon";
449*5f7ddb14SDimitry Andric   case EM_8051:
450*5f7ddb14SDimitry Andric     return "8051";
451*5f7ddb14SDimitry Andric   case EM_STXP7X:
452*5f7ddb14SDimitry Andric     return "stxp7x";
453*5f7ddb14SDimitry Andric   case EM_NDS32:
454*5f7ddb14SDimitry Andric     return "nds32";
455*5f7ddb14SDimitry Andric   case EM_ECOG1:
456*5f7ddb14SDimitry Andric     return "ecog1";
457*5f7ddb14SDimitry Andric   case EM_MAXQ30:
458*5f7ddb14SDimitry Andric     return "maxq30";
459*5f7ddb14SDimitry Andric   case EM_XIMO16:
460*5f7ddb14SDimitry Andric     return "ximo16";
461*5f7ddb14SDimitry Andric   case EM_MANIK:
462*5f7ddb14SDimitry Andric     return "manik";
463*5f7ddb14SDimitry Andric   case EM_CRAYNV2:
464*5f7ddb14SDimitry Andric     return "craynv2";
465*5f7ddb14SDimitry Andric   case EM_RX:
466*5f7ddb14SDimitry Andric     return "rx";
467*5f7ddb14SDimitry Andric   case EM_METAG:
468*5f7ddb14SDimitry Andric     return "metag";
469*5f7ddb14SDimitry Andric   case EM_MCST_ELBRUS:
470*5f7ddb14SDimitry Andric     return "mcst_elbrus";
471*5f7ddb14SDimitry Andric   case EM_ECOG16:
472*5f7ddb14SDimitry Andric     return "ecog16";
473*5f7ddb14SDimitry Andric   case EM_CR16:
474*5f7ddb14SDimitry Andric     return "cr16";
475*5f7ddb14SDimitry Andric   case EM_ETPU:
476*5f7ddb14SDimitry Andric     return "etpu";
477*5f7ddb14SDimitry Andric   case EM_SLE9X:
478*5f7ddb14SDimitry Andric     return "sle9x";
479*5f7ddb14SDimitry Andric   case EM_L10M:
480*5f7ddb14SDimitry Andric     return "l10m";
481*5f7ddb14SDimitry Andric   case EM_K10M:
482*5f7ddb14SDimitry Andric     return "k10m";
483*5f7ddb14SDimitry Andric   case EM_AARCH64:
484*5f7ddb14SDimitry Andric     return "AArch64";
485*5f7ddb14SDimitry Andric   case EM_AVR32:
486*5f7ddb14SDimitry Andric     return "avr32";
487*5f7ddb14SDimitry Andric   case EM_STM8:
488*5f7ddb14SDimitry Andric     return "stm8";
489*5f7ddb14SDimitry Andric   case EM_TILE64:
490*5f7ddb14SDimitry Andric     return "tile64";
491*5f7ddb14SDimitry Andric   case EM_TILEPRO:
492*5f7ddb14SDimitry Andric     return "tilepro";
493*5f7ddb14SDimitry Andric   case EM_CUDA:
494*5f7ddb14SDimitry Andric     return "cuda";
495*5f7ddb14SDimitry Andric   case EM_TILEGX:
496*5f7ddb14SDimitry Andric     return "tilegx";
497*5f7ddb14SDimitry Andric   case EM_CLOUDSHIELD:
498*5f7ddb14SDimitry Andric     return "cloudshield";
499*5f7ddb14SDimitry Andric   case EM_COREA_1ST:
500*5f7ddb14SDimitry Andric     return "corea_1st";
501*5f7ddb14SDimitry Andric   case EM_COREA_2ND:
502*5f7ddb14SDimitry Andric     return "corea_2nd";
503*5f7ddb14SDimitry Andric   case EM_ARC_COMPACT2:
504*5f7ddb14SDimitry Andric     return "arc_compact2";
505*5f7ddb14SDimitry Andric   case EM_OPEN8:
506*5f7ddb14SDimitry Andric     return "open8";
507*5f7ddb14SDimitry Andric   case EM_RL78:
508*5f7ddb14SDimitry Andric     return "rl78";
509*5f7ddb14SDimitry Andric   case EM_VIDEOCORE5:
510*5f7ddb14SDimitry Andric     return "videocore5";
511*5f7ddb14SDimitry Andric   case EM_78KOR:
512*5f7ddb14SDimitry Andric     return "78kor";
513*5f7ddb14SDimitry Andric   case EM_56800EX:
514*5f7ddb14SDimitry Andric     return "56800ex";
515*5f7ddb14SDimitry Andric   case EM_BA1:
516*5f7ddb14SDimitry Andric     return "ba1";
517*5f7ddb14SDimitry Andric   case EM_BA2:
518*5f7ddb14SDimitry Andric     return "ba2";
519*5f7ddb14SDimitry Andric   case EM_XCORE:
520*5f7ddb14SDimitry Andric     return "xcore";
521*5f7ddb14SDimitry Andric   case EM_MCHP_PIC:
522*5f7ddb14SDimitry Andric     return "mchp_pic";
523*5f7ddb14SDimitry Andric   case EM_INTEL205:
524*5f7ddb14SDimitry Andric     return "intel205";
525*5f7ddb14SDimitry Andric   case EM_INTEL206:
526*5f7ddb14SDimitry Andric     return "intel206";
527*5f7ddb14SDimitry Andric   case EM_INTEL207:
528*5f7ddb14SDimitry Andric     return "intel207";
529*5f7ddb14SDimitry Andric   case EM_INTEL208:
530*5f7ddb14SDimitry Andric     return "intel208";
531*5f7ddb14SDimitry Andric   case EM_INTEL209:
532*5f7ddb14SDimitry Andric     return "intel209";
533*5f7ddb14SDimitry Andric   case EM_KM32:
534*5f7ddb14SDimitry Andric     return "km32";
535*5f7ddb14SDimitry Andric   case EM_KMX32:
536*5f7ddb14SDimitry Andric     return "kmx32";
537*5f7ddb14SDimitry Andric   case EM_KMX16:
538*5f7ddb14SDimitry Andric     return "kmx16";
539*5f7ddb14SDimitry Andric   case EM_KMX8:
540*5f7ddb14SDimitry Andric     return "kmx8";
541*5f7ddb14SDimitry Andric   case EM_KVARC:
542*5f7ddb14SDimitry Andric     return "kvarc";
543*5f7ddb14SDimitry Andric   case EM_CDP:
544*5f7ddb14SDimitry Andric     return "cdp";
545*5f7ddb14SDimitry Andric   case EM_COGE:
546*5f7ddb14SDimitry Andric     return "coge";
547*5f7ddb14SDimitry Andric   case EM_COOL:
548*5f7ddb14SDimitry Andric     return "cool";
549*5f7ddb14SDimitry Andric   case EM_NORC:
550*5f7ddb14SDimitry Andric     return "norc";
551*5f7ddb14SDimitry Andric   case EM_CSR_KALIMBA:
552*5f7ddb14SDimitry Andric     return "csr_kalimba";
553*5f7ddb14SDimitry Andric   case EM_AMDGPU:
554*5f7ddb14SDimitry Andric     return "amdgpu";
555*5f7ddb14SDimitry Andric   case EM_RISCV:
556*5f7ddb14SDimitry Andric     return "riscv";
557*5f7ddb14SDimitry Andric   case EM_LANAI:
558*5f7ddb14SDimitry Andric     return "lanai";
559*5f7ddb14SDimitry Andric   case EM_BPF:
560*5f7ddb14SDimitry Andric     return "bpf";
561*5f7ddb14SDimitry Andric   case EM_VE:
562*5f7ddb14SDimitry Andric     return "ve";
563*5f7ddb14SDimitry Andric   case EM_CSKY:
564*5f7ddb14SDimitry Andric     return "csky";
565*5f7ddb14SDimitry Andric   default:
566*5f7ddb14SDimitry Andric     return "None";
567*5f7ddb14SDimitry Andric   }
568*5f7ddb14SDimitry Andric }
569