xref: /llvm-project/llvm/lib/BinaryFormat/ELF.cpp (revision a5cc95147ed549e850b4e9641e84641e781e0ceb)
18b4acb06SHaowei Wu //===- llvm/BinaryFormat/ELF.cpp - The ELF format ---------------*- C++ -*-===//
28b4acb06SHaowei Wu //
38b4acb06SHaowei Wu // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
48b4acb06SHaowei Wu // See https://llvm.org/LICENSE.txt for license information.
58b4acb06SHaowei Wu // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
68b4acb06SHaowei Wu //
78b4acb06SHaowei Wu //===----------------------------------------------------------------------===//
88b4acb06SHaowei Wu 
98b4acb06SHaowei Wu #include "llvm/BinaryFormat/ELF.h"
108b4acb06SHaowei Wu #include "llvm/ADT/StringSwitch.h"
118b4acb06SHaowei Wu 
128b4acb06SHaowei Wu using namespace llvm;
138b4acb06SHaowei Wu using namespace ELF;
148b4acb06SHaowei Wu 
158b4acb06SHaowei Wu /// Convert an architecture name into ELF's e_machine value.
convertArchNameToEMachine(StringRef Arch)168b4acb06SHaowei Wu uint16_t ELF::convertArchNameToEMachine(StringRef Arch) {
178b4acb06SHaowei Wu   std::string LowerArch = Arch.lower();
188b4acb06SHaowei Wu   return StringSwitch<uint16_t>(LowerArch)
198b4acb06SHaowei Wu       .Case("none", EM_NONE)
208b4acb06SHaowei Wu       .Case("m32", EM_M32)
218b4acb06SHaowei Wu       .Case("sparc", EM_SPARC)
228b4acb06SHaowei Wu       .Case("386", EM_386)
238b4acb06SHaowei Wu       .Case("68k", EM_68K)
248b4acb06SHaowei Wu       .Case("88k", EM_88K)
258b4acb06SHaowei Wu       .Case("iamcu", EM_IAMCU)
268b4acb06SHaowei Wu       .Case("860", EM_860)
278b4acb06SHaowei Wu       .Case("mips", EM_MIPS)
288b4acb06SHaowei Wu       .Case("s370", EM_S370)
298b4acb06SHaowei Wu       .Case("mips_rs3_le", EM_MIPS_RS3_LE)
308b4acb06SHaowei Wu       .Case("parisc", EM_PARISC)
318b4acb06SHaowei Wu       .Case("vpp500", EM_VPP500)
328b4acb06SHaowei Wu       .Case("sparc32plus", EM_SPARC32PLUS)
338b4acb06SHaowei Wu       .Case("960", EM_960)
348b4acb06SHaowei Wu       .Case("ppc", EM_PPC)
358b4acb06SHaowei Wu       .Case("ppc64", EM_PPC64)
368b4acb06SHaowei Wu       .Case("s390", EM_S390)
378b4acb06SHaowei Wu       .Case("spu", EM_SPU)
388b4acb06SHaowei Wu       .Case("v800", EM_V800)
398b4acb06SHaowei Wu       .Case("fr20", EM_FR20)
408b4acb06SHaowei Wu       .Case("rh32", EM_RH32)
418b4acb06SHaowei Wu       .Case("rce", EM_RCE)
428b4acb06SHaowei Wu       .Case("arm", EM_ARM)
438b4acb06SHaowei Wu       .Case("alpha", EM_ALPHA)
448b4acb06SHaowei Wu       .Case("sh", EM_SH)
458b4acb06SHaowei Wu       .Case("sparcv9", EM_SPARCV9)
468b4acb06SHaowei Wu       .Case("tricore", EM_TRICORE)
478b4acb06SHaowei Wu       .Case("arc", EM_ARC)
488b4acb06SHaowei Wu       .Case("h8_300", EM_H8_300)
498b4acb06SHaowei Wu       .Case("h8_300h", EM_H8_300H)
508b4acb06SHaowei Wu       .Case("h8s", EM_H8S)
518b4acb06SHaowei Wu       .Case("h8_500", EM_H8_500)
528b4acb06SHaowei Wu       .Case("ia_64", EM_IA_64)
538b4acb06SHaowei Wu       .Case("mips_x", EM_MIPS_X)
548b4acb06SHaowei Wu       .Case("coldfire", EM_COLDFIRE)
558b4acb06SHaowei Wu       .Case("68hc12", EM_68HC12)
568b4acb06SHaowei Wu       .Case("mma", EM_MMA)
578b4acb06SHaowei Wu       .Case("pcp", EM_PCP)
588b4acb06SHaowei Wu       .Case("ncpu", EM_NCPU)
598b4acb06SHaowei Wu       .Case("ndr1", EM_NDR1)
608b4acb06SHaowei Wu       .Case("starcore", EM_STARCORE)
618b4acb06SHaowei Wu       .Case("me16", EM_ME16)
628b4acb06SHaowei Wu       .Case("st100", EM_ST100)
638b4acb06SHaowei Wu       .Case("tinyj", EM_TINYJ)
648b4acb06SHaowei Wu       .Case("x86_64", EM_X86_64)
658b4acb06SHaowei Wu       .Case("pdsp", EM_PDSP)
668b4acb06SHaowei Wu       .Case("pdp10", EM_PDP10)
678b4acb06SHaowei Wu       .Case("pdp11", EM_PDP11)
688b4acb06SHaowei Wu       .Case("fx66", EM_FX66)
698b4acb06SHaowei Wu       .Case("st9plus", EM_ST9PLUS)
708b4acb06SHaowei Wu       .Case("st7", EM_ST7)
718b4acb06SHaowei Wu       .Case("68hc16", EM_68HC16)
728b4acb06SHaowei Wu       .Case("68hc11", EM_68HC11)
738b4acb06SHaowei Wu       .Case("68hc08", EM_68HC08)
748b4acb06SHaowei Wu       .Case("68hc05", EM_68HC05)
758b4acb06SHaowei Wu       .Case("svx", EM_SVX)
768b4acb06SHaowei Wu       .Case("st19", EM_ST19)
778b4acb06SHaowei Wu       .Case("vax", EM_VAX)
788b4acb06SHaowei Wu       .Case("cris", EM_CRIS)
798b4acb06SHaowei Wu       .Case("javelin", EM_JAVELIN)
808b4acb06SHaowei Wu       .Case("firepath", EM_FIREPATH)
818b4acb06SHaowei Wu       .Case("zsp", EM_ZSP)
828b4acb06SHaowei Wu       .Case("mmix", EM_MMIX)
838b4acb06SHaowei Wu       .Case("huany", EM_HUANY)
848b4acb06SHaowei Wu       .Case("prism", EM_PRISM)
858b4acb06SHaowei Wu       .Case("avr", EM_AVR)
868b4acb06SHaowei Wu       .Case("fr30", EM_FR30)
878b4acb06SHaowei Wu       .Case("d10v", EM_D10V)
888b4acb06SHaowei Wu       .Case("d30v", EM_D30V)
898b4acb06SHaowei Wu       .Case("v850", EM_V850)
908b4acb06SHaowei Wu       .Case("m32r", EM_M32R)
918b4acb06SHaowei Wu       .Case("mn10300", EM_MN10300)
928b4acb06SHaowei Wu       .Case("mn10200", EM_MN10200)
938b4acb06SHaowei Wu       .Case("pj", EM_PJ)
948b4acb06SHaowei Wu       .Case("openrisc", EM_OPENRISC)
958b4acb06SHaowei Wu       .Case("arc_compact", EM_ARC_COMPACT)
968b4acb06SHaowei Wu       .Case("xtensa", EM_XTENSA)
978b4acb06SHaowei Wu       .Case("videocore", EM_VIDEOCORE)
988b4acb06SHaowei Wu       .Case("tmm_gpp", EM_TMM_GPP)
998b4acb06SHaowei Wu       .Case("ns32k", EM_NS32K)
1008b4acb06SHaowei Wu       .Case("tpc", EM_TPC)
1018b4acb06SHaowei Wu       .Case("snp1k", EM_SNP1K)
1028b4acb06SHaowei Wu       .Case("st200", EM_ST200)
1038b4acb06SHaowei Wu       .Case("ip2k", EM_IP2K)
1048b4acb06SHaowei Wu       .Case("max", EM_MAX)
1058b4acb06SHaowei Wu       .Case("cr", EM_CR)
1068b4acb06SHaowei Wu       .Case("f2mc16", EM_F2MC16)
1078b4acb06SHaowei Wu       .Case("msp430", EM_MSP430)
1088b4acb06SHaowei Wu       .Case("blackfin", EM_BLACKFIN)
1098b4acb06SHaowei Wu       .Case("se_c33", EM_SE_C33)
1108b4acb06SHaowei Wu       .Case("sep", EM_SEP)
1118b4acb06SHaowei Wu       .Case("arca", EM_ARCA)
1128b4acb06SHaowei Wu       .Case("unicore", EM_UNICORE)
1138b4acb06SHaowei Wu       .Case("excess", EM_EXCESS)
1148b4acb06SHaowei Wu       .Case("dxp", EM_DXP)
1158b4acb06SHaowei Wu       .Case("altera_nios2", EM_ALTERA_NIOS2)
1168b4acb06SHaowei Wu       .Case("crx", EM_CRX)
1178b4acb06SHaowei Wu       .Case("xgate", EM_XGATE)
1188b4acb06SHaowei Wu       .Case("c166", EM_C166)
1198b4acb06SHaowei Wu       .Case("m16c", EM_M16C)
1208b4acb06SHaowei Wu       .Case("dspic30f", EM_DSPIC30F)
1218b4acb06SHaowei Wu       .Case("ce", EM_CE)
1228b4acb06SHaowei Wu       .Case("m32c", EM_M32C)
1238b4acb06SHaowei Wu       .Case("tsk3000", EM_TSK3000)
1248b4acb06SHaowei Wu       .Case("rs08", EM_RS08)
1258b4acb06SHaowei Wu       .Case("sharc", EM_SHARC)
1268b4acb06SHaowei Wu       .Case("ecog2", EM_ECOG2)
1278b4acb06SHaowei Wu       .Case("score7", EM_SCORE7)
1288b4acb06SHaowei Wu       .Case("dsp24", EM_DSP24)
1298b4acb06SHaowei Wu       .Case("videocore3", EM_VIDEOCORE3)
1308b4acb06SHaowei Wu       .Case("latticemico32", EM_LATTICEMICO32)
1318b4acb06SHaowei Wu       .Case("se_c17", EM_SE_C17)
1328b4acb06SHaowei Wu       .Case("ti_c6000", EM_TI_C6000)
1338b4acb06SHaowei Wu       .Case("ti_c2000", EM_TI_C2000)
1348b4acb06SHaowei Wu       .Case("ti_c5500", EM_TI_C5500)
1358b4acb06SHaowei Wu       .Case("mmdsp_plus", EM_MMDSP_PLUS)
1368b4acb06SHaowei Wu       .Case("cypress_m8c", EM_CYPRESS_M8C)
1378b4acb06SHaowei Wu       .Case("r32c", EM_R32C)
1388b4acb06SHaowei Wu       .Case("trimedia", EM_TRIMEDIA)
1398b4acb06SHaowei Wu       .Case("hexagon", EM_HEXAGON)
1408b4acb06SHaowei Wu       .Case("8051", EM_8051)
1418b4acb06SHaowei Wu       .Case("stxp7x", EM_STXP7X)
1428b4acb06SHaowei Wu       .Case("nds32", EM_NDS32)
1438b4acb06SHaowei Wu       .Case("ecog1", EM_ECOG1)
1448b4acb06SHaowei Wu       .Case("ecog1x", EM_ECOG1X)
1458b4acb06SHaowei Wu       .Case("maxq30", EM_MAXQ30)
1468b4acb06SHaowei Wu       .Case("ximo16", EM_XIMO16)
1478b4acb06SHaowei Wu       .Case("manik", EM_MANIK)
1488b4acb06SHaowei Wu       .Case("craynv2", EM_CRAYNV2)
1498b4acb06SHaowei Wu       .Case("rx", EM_RX)
1508b4acb06SHaowei Wu       .Case("metag", EM_METAG)
1518b4acb06SHaowei Wu       .Case("mcst_elbrus", EM_MCST_ELBRUS)
1528b4acb06SHaowei Wu       .Case("ecog16", EM_ECOG16)
1538b4acb06SHaowei Wu       .Case("cr16", EM_CR16)
1548b4acb06SHaowei Wu       .Case("etpu", EM_ETPU)
1558b4acb06SHaowei Wu       .Case("sle9x", EM_SLE9X)
1568b4acb06SHaowei Wu       .Case("l10m", EM_L10M)
1578b4acb06SHaowei Wu       .Case("k10m", EM_K10M)
1588b4acb06SHaowei Wu       .Case("aarch64", EM_AARCH64)
1598b4acb06SHaowei Wu       .Case("avr32", EM_AVR32)
1608b4acb06SHaowei Wu       .Case("stm8", EM_STM8)
1618b4acb06SHaowei Wu       .Case("tile64", EM_TILE64)
1628b4acb06SHaowei Wu       .Case("tilepro", EM_TILEPRO)
1638b4acb06SHaowei Wu       .Case("cuda", EM_CUDA)
1648b4acb06SHaowei Wu       .Case("tilegx", EM_TILEGX)
1658b4acb06SHaowei Wu       .Case("cloudshield", EM_CLOUDSHIELD)
1668b4acb06SHaowei Wu       .Case("corea_1st", EM_COREA_1ST)
1678b4acb06SHaowei Wu       .Case("corea_2nd", EM_COREA_2ND)
1688b4acb06SHaowei Wu       .Case("arc_compact2", EM_ARC_COMPACT2)
1698b4acb06SHaowei Wu       .Case("open8", EM_OPEN8)
1708b4acb06SHaowei Wu       .Case("rl78", EM_RL78)
1718b4acb06SHaowei Wu       .Case("videocore5", EM_VIDEOCORE5)
1728b4acb06SHaowei Wu       .Case("78kor", EM_78KOR)
1738b4acb06SHaowei Wu       .Case("56800ex", EM_56800EX)
1748b4acb06SHaowei Wu       .Case("ba1", EM_BA1)
1758b4acb06SHaowei Wu       .Case("ba2", EM_BA2)
1768b4acb06SHaowei Wu       .Case("xcore", EM_XCORE)
1778b4acb06SHaowei Wu       .Case("mchp_pic", EM_MCHP_PIC)
1788b4acb06SHaowei Wu       .Case("intel205", EM_INTEL205)
1798b4acb06SHaowei Wu       .Case("intel206", EM_INTEL206)
1808b4acb06SHaowei Wu       .Case("intel207", EM_INTEL207)
1818b4acb06SHaowei Wu       .Case("intel208", EM_INTEL208)
1828b4acb06SHaowei Wu       .Case("intel209", EM_INTEL209)
1838b4acb06SHaowei Wu       .Case("km32", EM_KM32)
1848b4acb06SHaowei Wu       .Case("kmx32", EM_KMX32)
1858b4acb06SHaowei Wu       .Case("kmx16", EM_KMX16)
1868b4acb06SHaowei Wu       .Case("kmx8", EM_KMX8)
1878b4acb06SHaowei Wu       .Case("kvarc", EM_KVARC)
1888b4acb06SHaowei Wu       .Case("cdp", EM_CDP)
1898b4acb06SHaowei Wu       .Case("coge", EM_COGE)
1908b4acb06SHaowei Wu       .Case("cool", EM_COOL)
1918b4acb06SHaowei Wu       .Case("norc", EM_NORC)
1928b4acb06SHaowei Wu       .Case("csr_kalimba", EM_CSR_KALIMBA)
1938b4acb06SHaowei Wu       .Case("amdgpu", EM_AMDGPU)
1948b4acb06SHaowei Wu       .Case("riscv", EM_RISCV)
1958b4acb06SHaowei Wu       .Case("lanai", EM_LANAI)
1968b4acb06SHaowei Wu       .Case("bpf", EM_BPF)
1978b4acb06SHaowei Wu       .Case("ve", EM_VE)
1988b4acb06SHaowei Wu       .Case("csky", EM_CSKY)
199cc07185aSWANG Xuerui       .Case("loongarch", EM_LOONGARCH)
2008b4acb06SHaowei Wu       .Default(EM_NONE);
2018b4acb06SHaowei Wu }
2028b4acb06SHaowei Wu 
2038b4acb06SHaowei Wu /// Convert an ELF's e_machine value into an architecture name.
convertEMachineToArchName(uint16_t EMachine)2048b4acb06SHaowei Wu StringRef ELF::convertEMachineToArchName(uint16_t EMachine) {
2058b4acb06SHaowei Wu   switch (EMachine) {
2068b4acb06SHaowei Wu   case EM_NONE:
2078b4acb06SHaowei Wu     return "None";
2088b4acb06SHaowei Wu   case EM_M32:
2098b4acb06SHaowei Wu     return "m32";
2108b4acb06SHaowei Wu   case EM_SPARC:
2118b4acb06SHaowei Wu     return "sparc";
2128b4acb06SHaowei Wu   case EM_386:
2138b4acb06SHaowei Wu     return "386";
2148b4acb06SHaowei Wu   case EM_68K:
2158b4acb06SHaowei Wu     return "68k";
2168b4acb06SHaowei Wu   case EM_88K:
2178b4acb06SHaowei Wu     return "88k";
2188b4acb06SHaowei Wu   case EM_IAMCU:
2198b4acb06SHaowei Wu     return "iamcu";
2208b4acb06SHaowei Wu   case EM_860:
2218b4acb06SHaowei Wu     return "860";
2228b4acb06SHaowei Wu   case EM_MIPS:
2238b4acb06SHaowei Wu     return "mips";
2248b4acb06SHaowei Wu   case EM_S370:
2258b4acb06SHaowei Wu     return "s370";
2268b4acb06SHaowei Wu   case EM_MIPS_RS3_LE:
2278b4acb06SHaowei Wu     return "mips_rs3_le";
2288b4acb06SHaowei Wu   case EM_PARISC:
2298b4acb06SHaowei Wu     return "parisc";
2308b4acb06SHaowei Wu   case EM_VPP500:
2318b4acb06SHaowei Wu     return "vpp500";
2328b4acb06SHaowei Wu   case EM_SPARC32PLUS:
2338b4acb06SHaowei Wu     return "sparc32plus";
2348b4acb06SHaowei Wu   case EM_960:
2358b4acb06SHaowei Wu     return "960";
2368b4acb06SHaowei Wu   case EM_PPC:
2378b4acb06SHaowei Wu     return "ppc";
2388b4acb06SHaowei Wu   case EM_PPC64:
2398b4acb06SHaowei Wu     return "ppc64";
2408b4acb06SHaowei Wu   case EM_S390:
2418b4acb06SHaowei Wu     return "s390";
2428b4acb06SHaowei Wu   case EM_SPU:
2438b4acb06SHaowei Wu     return "spu";
2448b4acb06SHaowei Wu   case EM_V800:
2458b4acb06SHaowei Wu     return "v800";
2468b4acb06SHaowei Wu   case EM_FR20:
2478b4acb06SHaowei Wu     return "fr20";
2488b4acb06SHaowei Wu   case EM_RH32:
2498b4acb06SHaowei Wu     return "rh32";
2508b4acb06SHaowei Wu   case EM_RCE:
2518b4acb06SHaowei Wu     return "rce";
2528b4acb06SHaowei Wu   case EM_ARM:
2538b4acb06SHaowei Wu     return "arm";
2548b4acb06SHaowei Wu   case EM_ALPHA:
2558b4acb06SHaowei Wu     return "alpha";
2568b4acb06SHaowei Wu   case EM_SH:
2578b4acb06SHaowei Wu     return "sh";
2588b4acb06SHaowei Wu   case EM_SPARCV9:
2598b4acb06SHaowei Wu     return "sparcv9";
2608b4acb06SHaowei Wu   case EM_TRICORE:
2618b4acb06SHaowei Wu     return "tricore";
2628b4acb06SHaowei Wu   case EM_ARC:
2638b4acb06SHaowei Wu     return "arc";
2648b4acb06SHaowei Wu   case EM_H8_300:
2658b4acb06SHaowei Wu     return "h8_300";
2668b4acb06SHaowei Wu   case EM_H8_300H:
2678b4acb06SHaowei Wu     return "h8_300h";
2688b4acb06SHaowei Wu   case EM_H8S:
2698b4acb06SHaowei Wu     return "h8s";
2708b4acb06SHaowei Wu   case EM_H8_500:
2718b4acb06SHaowei Wu     return "h8_500";
2728b4acb06SHaowei Wu   case EM_IA_64:
2738b4acb06SHaowei Wu     return "ia_64";
2748b4acb06SHaowei Wu   case EM_MIPS_X:
2758b4acb06SHaowei Wu     return "mips_x";
2768b4acb06SHaowei Wu   case EM_COLDFIRE:
2778b4acb06SHaowei Wu     return "coldfire";
2788b4acb06SHaowei Wu   case EM_68HC12:
2798b4acb06SHaowei Wu     return "68hc12";
2808b4acb06SHaowei Wu   case EM_MMA:
2818b4acb06SHaowei Wu     return "mma";
2828b4acb06SHaowei Wu   case EM_PCP:
2838b4acb06SHaowei Wu     return "pcp";
2848b4acb06SHaowei Wu   case EM_NCPU:
2858b4acb06SHaowei Wu     return "ncpu";
2868b4acb06SHaowei Wu   case EM_NDR1:
2878b4acb06SHaowei Wu     return "ndr1";
2888b4acb06SHaowei Wu   case EM_STARCORE:
2898b4acb06SHaowei Wu     return "starcore";
2908b4acb06SHaowei Wu   case EM_ME16:
2918b4acb06SHaowei Wu     return "me16";
2928b4acb06SHaowei Wu   case EM_ST100:
2938b4acb06SHaowei Wu     return "st100";
2948b4acb06SHaowei Wu   case EM_TINYJ:
2958b4acb06SHaowei Wu     return "tinyj";
2968b4acb06SHaowei Wu   case EM_X86_64:
2978b4acb06SHaowei Wu     return "x86_64";
2988b4acb06SHaowei Wu   case EM_PDSP:
2998b4acb06SHaowei Wu     return "pdsp";
3008b4acb06SHaowei Wu   case EM_PDP10:
3018b4acb06SHaowei Wu     return "pdp10";
3028b4acb06SHaowei Wu   case EM_PDP11:
3038b4acb06SHaowei Wu     return "pdp11";
3048b4acb06SHaowei Wu   case EM_FX66:
3058b4acb06SHaowei Wu     return "fx66";
3068b4acb06SHaowei Wu   case EM_ST9PLUS:
3078b4acb06SHaowei Wu     return "st9plus";
3088b4acb06SHaowei Wu   case EM_ST7:
3098b4acb06SHaowei Wu     return "st7";
3108b4acb06SHaowei Wu   case EM_68HC16:
3118b4acb06SHaowei Wu     return "68hc16";
3128b4acb06SHaowei Wu   case EM_68HC11:
3138b4acb06SHaowei Wu     return "68hc11";
3148b4acb06SHaowei Wu   case EM_68HC08:
3158b4acb06SHaowei Wu     return "68hc08";
3168b4acb06SHaowei Wu   case EM_68HC05:
3178b4acb06SHaowei Wu     return "68hc05";
3188b4acb06SHaowei Wu   case EM_SVX:
3198b4acb06SHaowei Wu     return "svx";
3208b4acb06SHaowei Wu   case EM_ST19:
3218b4acb06SHaowei Wu     return "st19";
3228b4acb06SHaowei Wu   case EM_VAX:
3238b4acb06SHaowei Wu     return "vax";
3248b4acb06SHaowei Wu   case EM_CRIS:
3258b4acb06SHaowei Wu     return "cris";
3268b4acb06SHaowei Wu   case EM_JAVELIN:
3278b4acb06SHaowei Wu     return "javelin";
3288b4acb06SHaowei Wu   case EM_FIREPATH:
3298b4acb06SHaowei Wu     return "firepath";
3308b4acb06SHaowei Wu   case EM_ZSP:
3318b4acb06SHaowei Wu     return "zsp";
3328b4acb06SHaowei Wu   case EM_MMIX:
3338b4acb06SHaowei Wu     return "mmix";
3348b4acb06SHaowei Wu   case EM_HUANY:
3358b4acb06SHaowei Wu     return "huany";
3368b4acb06SHaowei Wu   case EM_PRISM:
3378b4acb06SHaowei Wu     return "prism";
3388b4acb06SHaowei Wu   case EM_AVR:
3398b4acb06SHaowei Wu     return "avr";
3408b4acb06SHaowei Wu   case EM_FR30:
3418b4acb06SHaowei Wu     return "fr30";
3428b4acb06SHaowei Wu   case EM_D10V:
3438b4acb06SHaowei Wu     return "d10v";
3448b4acb06SHaowei Wu   case EM_D30V:
3458b4acb06SHaowei Wu     return "d30v";
3468b4acb06SHaowei Wu   case EM_V850:
3478b4acb06SHaowei Wu     return "v850";
3488b4acb06SHaowei Wu   case EM_M32R:
3498b4acb06SHaowei Wu     return "m32r";
3508b4acb06SHaowei Wu   case EM_MN10300:
3518b4acb06SHaowei Wu     return "mn10300";
3528b4acb06SHaowei Wu   case EM_MN10200:
3538b4acb06SHaowei Wu     return "mn10200";
3548b4acb06SHaowei Wu   case EM_PJ:
3558b4acb06SHaowei Wu     return "pj";
3568b4acb06SHaowei Wu   case EM_OPENRISC:
3578b4acb06SHaowei Wu     return "openrisc";
3588b4acb06SHaowei Wu   case EM_ARC_COMPACT:
3598b4acb06SHaowei Wu     return "arc_compact";
3608b4acb06SHaowei Wu   case EM_XTENSA:
3618b4acb06SHaowei Wu     return "xtensa";
3628b4acb06SHaowei Wu   case EM_VIDEOCORE:
3638b4acb06SHaowei Wu     return "videocore";
3648b4acb06SHaowei Wu   case EM_TMM_GPP:
3658b4acb06SHaowei Wu     return "tmm_gpp";
3668b4acb06SHaowei Wu   case EM_NS32K:
3678b4acb06SHaowei Wu     return "ns32k";
3688b4acb06SHaowei Wu   case EM_TPC:
3698b4acb06SHaowei Wu     return "tpc";
3708b4acb06SHaowei Wu   case EM_SNP1K:
3718b4acb06SHaowei Wu     return "snp1k";
3728b4acb06SHaowei Wu   case EM_ST200:
3738b4acb06SHaowei Wu     return "st200";
3748b4acb06SHaowei Wu   case EM_IP2K:
3758b4acb06SHaowei Wu     return "ip2k";
3768b4acb06SHaowei Wu   case EM_MAX:
3778b4acb06SHaowei Wu     return "max";
3788b4acb06SHaowei Wu   case EM_CR:
3798b4acb06SHaowei Wu     return "cr";
3808b4acb06SHaowei Wu   case EM_F2MC16:
3818b4acb06SHaowei Wu     return "f2mc16";
3828b4acb06SHaowei Wu   case EM_MSP430:
3838b4acb06SHaowei Wu     return "msp430";
3848b4acb06SHaowei Wu   case EM_BLACKFIN:
3858b4acb06SHaowei Wu     return "blackfin";
3868b4acb06SHaowei Wu   case EM_SE_C33:
3878b4acb06SHaowei Wu     return "se_c33";
3888b4acb06SHaowei Wu   case EM_SEP:
3898b4acb06SHaowei Wu     return "sep";
3908b4acb06SHaowei Wu   case EM_ARCA:
3918b4acb06SHaowei Wu     return "arca";
3928b4acb06SHaowei Wu   case EM_UNICORE:
3938b4acb06SHaowei Wu     return "unicore";
3948b4acb06SHaowei Wu   case EM_EXCESS:
3958b4acb06SHaowei Wu     return "excess";
3968b4acb06SHaowei Wu   case EM_DXP:
3978b4acb06SHaowei Wu     return "dxp";
3988b4acb06SHaowei Wu   case EM_ALTERA_NIOS2:
3998b4acb06SHaowei Wu     return "altera_nios2";
4008b4acb06SHaowei Wu   case EM_CRX:
4018b4acb06SHaowei Wu     return "crx";
4028b4acb06SHaowei Wu   case EM_XGATE:
4038b4acb06SHaowei Wu     return "xgate";
4048b4acb06SHaowei Wu   case EM_C166:
4058b4acb06SHaowei Wu     return "c166";
4068b4acb06SHaowei Wu   case EM_M16C:
4078b4acb06SHaowei Wu     return "m16c";
4088b4acb06SHaowei Wu   case EM_DSPIC30F:
4098b4acb06SHaowei Wu     return "dspic30f";
4108b4acb06SHaowei Wu   case EM_CE:
4118b4acb06SHaowei Wu     return "ce";
4128b4acb06SHaowei Wu   case EM_M32C:
4138b4acb06SHaowei Wu     return "m32c";
4148b4acb06SHaowei Wu   case EM_TSK3000:
4158b4acb06SHaowei Wu     return "tsk3000";
4168b4acb06SHaowei Wu   case EM_RS08:
4178b4acb06SHaowei Wu     return "rs08";
4188b4acb06SHaowei Wu   case EM_SHARC:
4198b4acb06SHaowei Wu     return "sharc";
4208b4acb06SHaowei Wu   case EM_ECOG2:
4218b4acb06SHaowei Wu     return "ecog2";
4228b4acb06SHaowei Wu   case EM_SCORE7:
4238b4acb06SHaowei Wu     return "score7";
4248b4acb06SHaowei Wu   case EM_DSP24:
4258b4acb06SHaowei Wu     return "dsp24";
4268b4acb06SHaowei Wu   case EM_VIDEOCORE3:
4278b4acb06SHaowei Wu     return "videocore3";
4288b4acb06SHaowei Wu   case EM_LATTICEMICO32:
4298b4acb06SHaowei Wu     return "latticemico32";
4308b4acb06SHaowei Wu   case EM_SE_C17:
4318b4acb06SHaowei Wu     return "se_c17";
4328b4acb06SHaowei Wu   case EM_TI_C6000:
4338b4acb06SHaowei Wu     return "ti_c6000";
4348b4acb06SHaowei Wu   case EM_TI_C2000:
4358b4acb06SHaowei Wu     return "ti_c2000";
4368b4acb06SHaowei Wu   case EM_TI_C5500:
4378b4acb06SHaowei Wu     return "ti_c5500";
4388b4acb06SHaowei Wu   case EM_MMDSP_PLUS:
4398b4acb06SHaowei Wu     return "mmdsp_plus";
4408b4acb06SHaowei Wu   case EM_CYPRESS_M8C:
4418b4acb06SHaowei Wu     return "cypress_m8c";
4428b4acb06SHaowei Wu   case EM_R32C:
4438b4acb06SHaowei Wu     return "r32c";
4448b4acb06SHaowei Wu   case EM_TRIMEDIA:
4458b4acb06SHaowei Wu     return "trimedia";
4468b4acb06SHaowei Wu   case EM_HEXAGON:
4478b4acb06SHaowei Wu     return "hexagon";
4488b4acb06SHaowei Wu   case EM_8051:
4498b4acb06SHaowei Wu     return "8051";
4508b4acb06SHaowei Wu   case EM_STXP7X:
4518b4acb06SHaowei Wu     return "stxp7x";
4528b4acb06SHaowei Wu   case EM_NDS32:
4538b4acb06SHaowei Wu     return "nds32";
4548b4acb06SHaowei Wu   case EM_ECOG1:
4558b4acb06SHaowei Wu     return "ecog1";
4568b4acb06SHaowei Wu   case EM_MAXQ30:
4578b4acb06SHaowei Wu     return "maxq30";
4588b4acb06SHaowei Wu   case EM_XIMO16:
4598b4acb06SHaowei Wu     return "ximo16";
4608b4acb06SHaowei Wu   case EM_MANIK:
4618b4acb06SHaowei Wu     return "manik";
4628b4acb06SHaowei Wu   case EM_CRAYNV2:
4638b4acb06SHaowei Wu     return "craynv2";
4648b4acb06SHaowei Wu   case EM_RX:
4658b4acb06SHaowei Wu     return "rx";
4668b4acb06SHaowei Wu   case EM_METAG:
4678b4acb06SHaowei Wu     return "metag";
4688b4acb06SHaowei Wu   case EM_MCST_ELBRUS:
4698b4acb06SHaowei Wu     return "mcst_elbrus";
4708b4acb06SHaowei Wu   case EM_ECOG16:
4718b4acb06SHaowei Wu     return "ecog16";
4728b4acb06SHaowei Wu   case EM_CR16:
4738b4acb06SHaowei Wu     return "cr16";
4748b4acb06SHaowei Wu   case EM_ETPU:
4758b4acb06SHaowei Wu     return "etpu";
4768b4acb06SHaowei Wu   case EM_SLE9X:
4778b4acb06SHaowei Wu     return "sle9x";
4788b4acb06SHaowei Wu   case EM_L10M:
4798b4acb06SHaowei Wu     return "l10m";
4808b4acb06SHaowei Wu   case EM_K10M:
4818b4acb06SHaowei Wu     return "k10m";
4828b4acb06SHaowei Wu   case EM_AARCH64:
4838b4acb06SHaowei Wu     return "AArch64";
4848b4acb06SHaowei Wu   case EM_AVR32:
4858b4acb06SHaowei Wu     return "avr32";
4868b4acb06SHaowei Wu   case EM_STM8:
4878b4acb06SHaowei Wu     return "stm8";
4888b4acb06SHaowei Wu   case EM_TILE64:
4898b4acb06SHaowei Wu     return "tile64";
4908b4acb06SHaowei Wu   case EM_TILEPRO:
4918b4acb06SHaowei Wu     return "tilepro";
4928b4acb06SHaowei Wu   case EM_CUDA:
4938b4acb06SHaowei Wu     return "cuda";
4948b4acb06SHaowei Wu   case EM_TILEGX:
4958b4acb06SHaowei Wu     return "tilegx";
4968b4acb06SHaowei Wu   case EM_CLOUDSHIELD:
4978b4acb06SHaowei Wu     return "cloudshield";
4988b4acb06SHaowei Wu   case EM_COREA_1ST:
4998b4acb06SHaowei Wu     return "corea_1st";
5008b4acb06SHaowei Wu   case EM_COREA_2ND:
5018b4acb06SHaowei Wu     return "corea_2nd";
5028b4acb06SHaowei Wu   case EM_ARC_COMPACT2:
5038b4acb06SHaowei Wu     return "arc_compact2";
5048b4acb06SHaowei Wu   case EM_OPEN8:
5058b4acb06SHaowei Wu     return "open8";
5068b4acb06SHaowei Wu   case EM_RL78:
5078b4acb06SHaowei Wu     return "rl78";
5088b4acb06SHaowei Wu   case EM_VIDEOCORE5:
5098b4acb06SHaowei Wu     return "videocore5";
5108b4acb06SHaowei Wu   case EM_78KOR:
5118b4acb06SHaowei Wu     return "78kor";
5128b4acb06SHaowei Wu   case EM_56800EX:
5138b4acb06SHaowei Wu     return "56800ex";
5148b4acb06SHaowei Wu   case EM_BA1:
5158b4acb06SHaowei Wu     return "ba1";
5168b4acb06SHaowei Wu   case EM_BA2:
5178b4acb06SHaowei Wu     return "ba2";
5188b4acb06SHaowei Wu   case EM_XCORE:
5198b4acb06SHaowei Wu     return "xcore";
5208b4acb06SHaowei Wu   case EM_MCHP_PIC:
5218b4acb06SHaowei Wu     return "mchp_pic";
5228b4acb06SHaowei Wu   case EM_INTEL205:
5238b4acb06SHaowei Wu     return "intel205";
5248b4acb06SHaowei Wu   case EM_INTEL206:
5258b4acb06SHaowei Wu     return "intel206";
5268b4acb06SHaowei Wu   case EM_INTEL207:
5278b4acb06SHaowei Wu     return "intel207";
5288b4acb06SHaowei Wu   case EM_INTEL208:
5298b4acb06SHaowei Wu     return "intel208";
5308b4acb06SHaowei Wu   case EM_INTEL209:
5318b4acb06SHaowei Wu     return "intel209";
5328b4acb06SHaowei Wu   case EM_KM32:
5338b4acb06SHaowei Wu     return "km32";
5348b4acb06SHaowei Wu   case EM_KMX32:
5358b4acb06SHaowei Wu     return "kmx32";
5368b4acb06SHaowei Wu   case EM_KMX16:
5378b4acb06SHaowei Wu     return "kmx16";
5388b4acb06SHaowei Wu   case EM_KMX8:
5398b4acb06SHaowei Wu     return "kmx8";
5408b4acb06SHaowei Wu   case EM_KVARC:
5418b4acb06SHaowei Wu     return "kvarc";
5428b4acb06SHaowei Wu   case EM_CDP:
5438b4acb06SHaowei Wu     return "cdp";
5448b4acb06SHaowei Wu   case EM_COGE:
5458b4acb06SHaowei Wu     return "coge";
5468b4acb06SHaowei Wu   case EM_COOL:
5478b4acb06SHaowei Wu     return "cool";
5488b4acb06SHaowei Wu   case EM_NORC:
5498b4acb06SHaowei Wu     return "norc";
5508b4acb06SHaowei Wu   case EM_CSR_KALIMBA:
5518b4acb06SHaowei Wu     return "csr_kalimba";
5528b4acb06SHaowei Wu   case EM_AMDGPU:
5538b4acb06SHaowei Wu     return "amdgpu";
5548b4acb06SHaowei Wu   case EM_RISCV:
5558b4acb06SHaowei Wu     return "riscv";
5568b4acb06SHaowei Wu   case EM_LANAI:
5578b4acb06SHaowei Wu     return "lanai";
5588b4acb06SHaowei Wu   case EM_BPF:
5598b4acb06SHaowei Wu     return "bpf";
5608b4acb06SHaowei Wu   case EM_VE:
5618b4acb06SHaowei Wu     return "ve";
5628b4acb06SHaowei Wu   case EM_CSKY:
5638b4acb06SHaowei Wu     return "csky";
564cc07185aSWANG Xuerui   case EM_LOONGARCH:
565cc07185aSWANG Xuerui     return "loongarch";
5668b4acb06SHaowei Wu   default:
5678b4acb06SHaowei Wu     return "None";
5688b4acb06SHaowei Wu   }
5698b4acb06SHaowei Wu }
57023d88a82SFred Grim 
convertNameToOSABI(StringRef Name)571*a5cc9514SFangrui Song uint8_t ELF::convertNameToOSABI(StringRef Name) {
572*a5cc9514SFangrui Song   return StringSwitch<uint16_t>(Name)
57323d88a82SFred Grim       .StartsWith("hpux", ELFOSABI_HPUX)
57423d88a82SFred Grim       .StartsWith("netbsd", ELFOSABI_NETBSD)
575*a5cc9514SFangrui Song       .StartsWith("gnu", ELFOSABI_GNU)
57623d88a82SFred Grim       .StartsWith("hurd", ELFOSABI_HURD)
57723d88a82SFred Grim       .StartsWith("solaris", ELFOSABI_SOLARIS)
57823d88a82SFred Grim       .StartsWith("aix", ELFOSABI_AIX)
57923d88a82SFred Grim       .StartsWith("irix", ELFOSABI_IRIX)
58023d88a82SFred Grim       .StartsWith("freebsd", ELFOSABI_FREEBSD)
58123d88a82SFred Grim       .StartsWith("tru64", ELFOSABI_TRU64)
58223d88a82SFred Grim       .StartsWith("modesto", ELFOSABI_MODESTO)
58323d88a82SFred Grim       .StartsWith("openbsd", ELFOSABI_OPENBSD)
58423d88a82SFred Grim       .StartsWith("openvms", ELFOSABI_OPENVMS)
58523d88a82SFred Grim       .StartsWith("nsk", ELFOSABI_NSK)
58623d88a82SFred Grim       .StartsWith("aros", ELFOSABI_AROS)
58723d88a82SFred Grim       .StartsWith("fenixos", ELFOSABI_FENIXOS)
58823d88a82SFred Grim       .StartsWith("cloudabi", ELFOSABI_CLOUDABI)
58923d88a82SFred Grim       .StartsWith("cuda", ELFOSABI_CUDA)
59023d88a82SFred Grim       .StartsWith("amdhsa", ELFOSABI_AMDGPU_HSA)
59123d88a82SFred Grim       .StartsWith("amdpal", ELFOSABI_AMDGPU_PAL)
59223d88a82SFred Grim       .StartsWith("mesa3d", ELFOSABI_AMDGPU_MESA3D)
59323d88a82SFred Grim       .StartsWith("arm", ELFOSABI_ARM)
59423d88a82SFred Grim       .StartsWith("standalone", ELFOSABI_STANDALONE)
59523d88a82SFred Grim       .StartsWith("none", ELFOSABI_NONE)
59623d88a82SFred Grim       .Default(ELFOSABI_NONE);
59723d88a82SFred Grim }
59823d88a82SFred Grim 
convertOSABIToName(uint8_t OSABI)599*a5cc9514SFangrui Song StringRef ELF::convertOSABIToName(uint8_t OSABI) {
600*a5cc9514SFangrui Song   switch (OSABI) {
60123d88a82SFred Grim   case ELFOSABI_HPUX:
60223d88a82SFred Grim     return "hpux";
60323d88a82SFred Grim   case ELFOSABI_NETBSD:
60423d88a82SFred Grim     return "netbsd";
605*a5cc9514SFangrui Song   case ELFOSABI_GNU:
606*a5cc9514SFangrui Song     return "gnu";
60723d88a82SFred Grim   case ELFOSABI_HURD:
60823d88a82SFred Grim     return "hurd";
60923d88a82SFred Grim   case ELFOSABI_SOLARIS:
61023d88a82SFred Grim     return "solaris";
61123d88a82SFred Grim   case ELFOSABI_AIX:
61223d88a82SFred Grim     return "aix";
61323d88a82SFred Grim   case ELFOSABI_IRIX:
61423d88a82SFred Grim     return "irix";
61523d88a82SFred Grim   case ELFOSABI_FREEBSD:
61623d88a82SFred Grim     return "freebsd";
61723d88a82SFred Grim   case ELFOSABI_TRU64:
61823d88a82SFred Grim     return "tru64";
61923d88a82SFred Grim   case ELFOSABI_MODESTO:
62023d88a82SFred Grim     return "modesto";
62123d88a82SFred Grim   case ELFOSABI_OPENBSD:
62223d88a82SFred Grim     return "openbsd";
62323d88a82SFred Grim   case ELFOSABI_OPENVMS:
62423d88a82SFred Grim     return "openvms";
62523d88a82SFred Grim   case ELFOSABI_NSK:
62623d88a82SFred Grim     return "nsk";
62723d88a82SFred Grim   case ELFOSABI_AROS:
62823d88a82SFred Grim     return "aros";
62923d88a82SFred Grim   case ELFOSABI_FENIXOS:
63023d88a82SFred Grim     return "fenixos";
63123d88a82SFred Grim   case ELFOSABI_CLOUDABI:
63223d88a82SFred Grim     return "cloudabi";
63323d88a82SFred Grim   case ELFOSABI_CUDA:
63423d88a82SFred Grim     return "cuda";
63523d88a82SFred Grim   case ELFOSABI_AMDGPU_HSA:
63623d88a82SFred Grim     return "amdhsa";
63723d88a82SFred Grim   case ELFOSABI_AMDGPU_PAL:
63823d88a82SFred Grim     return "amdpal";
63923d88a82SFred Grim   case ELFOSABI_AMDGPU_MESA3D:
64023d88a82SFred Grim     return "mesa3d";
64123d88a82SFred Grim   case ELFOSABI_ARM:
64223d88a82SFred Grim     return "arm";
64323d88a82SFred Grim   case ELFOSABI_STANDALONE:
64423d88a82SFred Grim     return "standalone";
64523d88a82SFred Grim   default:
64623d88a82SFred Grim     return "none";
64723d88a82SFred Grim   }
64823d88a82SFred Grim }
649