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