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