569 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			569 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
	
//===- llvm/BinaryFormat/ELF.cpp - The ELF format ---------------*- C++ -*-===//
 | 
						|
//
 | 
						|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | 
						|
// See https://llvm.org/LICENSE.txt for license information.
 | 
						|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "llvm/BinaryFormat/ELF.h"
 | 
						|
#include "llvm/ADT/DenseMap.h"
 | 
						|
#include "llvm/ADT/StringSwitch.h"
 | 
						|
#include "llvm/Support/Error.h"
 | 
						|
 | 
						|
using namespace llvm;
 | 
						|
using namespace ELF;
 | 
						|
 | 
						|
/// Convert an architecture name into ELF's e_machine value.
 | 
						|
uint16_t ELF::convertArchNameToEMachine(StringRef Arch) {
 | 
						|
  std::string LowerArch = Arch.lower();
 | 
						|
  return StringSwitch<uint16_t>(LowerArch)
 | 
						|
      .Case("none", EM_NONE)
 | 
						|
      .Case("m32", EM_M32)
 | 
						|
      .Case("sparc", EM_SPARC)
 | 
						|
      .Case("386", EM_386)
 | 
						|
      .Case("68k", EM_68K)
 | 
						|
      .Case("88k", EM_88K)
 | 
						|
      .Case("iamcu", EM_IAMCU)
 | 
						|
      .Case("860", EM_860)
 | 
						|
      .Case("mips", EM_MIPS)
 | 
						|
      .Case("s370", EM_S370)
 | 
						|
      .Case("mips_rs3_le", EM_MIPS_RS3_LE)
 | 
						|
      .Case("parisc", EM_PARISC)
 | 
						|
      .Case("vpp500", EM_VPP500)
 | 
						|
      .Case("sparc32plus", EM_SPARC32PLUS)
 | 
						|
      .Case("960", EM_960)
 | 
						|
      .Case("ppc", EM_PPC)
 | 
						|
      .Case("ppc64", EM_PPC64)
 | 
						|
      .Case("s390", EM_S390)
 | 
						|
      .Case("spu", EM_SPU)
 | 
						|
      .Case("v800", EM_V800)
 | 
						|
      .Case("fr20", EM_FR20)
 | 
						|
      .Case("rh32", EM_RH32)
 | 
						|
      .Case("rce", EM_RCE)
 | 
						|
      .Case("arm", EM_ARM)
 | 
						|
      .Case("alpha", EM_ALPHA)
 | 
						|
      .Case("sh", EM_SH)
 | 
						|
      .Case("sparcv9", EM_SPARCV9)
 | 
						|
      .Case("tricore", EM_TRICORE)
 | 
						|
      .Case("arc", EM_ARC)
 | 
						|
      .Case("h8_300", EM_H8_300)
 | 
						|
      .Case("h8_300h", EM_H8_300H)
 | 
						|
      .Case("h8s", EM_H8S)
 | 
						|
      .Case("h8_500", EM_H8_500)
 | 
						|
      .Case("ia_64", EM_IA_64)
 | 
						|
      .Case("mips_x", EM_MIPS_X)
 | 
						|
      .Case("coldfire", EM_COLDFIRE)
 | 
						|
      .Case("68hc12", EM_68HC12)
 | 
						|
      .Case("mma", EM_MMA)
 | 
						|
      .Case("pcp", EM_PCP)
 | 
						|
      .Case("ncpu", EM_NCPU)
 | 
						|
      .Case("ndr1", EM_NDR1)
 | 
						|
      .Case("starcore", EM_STARCORE)
 | 
						|
      .Case("me16", EM_ME16)
 | 
						|
      .Case("st100", EM_ST100)
 | 
						|
      .Case("tinyj", EM_TINYJ)
 | 
						|
      .Case("x86_64", EM_X86_64)
 | 
						|
      .Case("pdsp", EM_PDSP)
 | 
						|
      .Case("pdp10", EM_PDP10)
 | 
						|
      .Case("pdp11", EM_PDP11)
 | 
						|
      .Case("fx66", EM_FX66)
 | 
						|
      .Case("st9plus", EM_ST9PLUS)
 | 
						|
      .Case("st7", EM_ST7)
 | 
						|
      .Case("68hc16", EM_68HC16)
 | 
						|
      .Case("68hc11", EM_68HC11)
 | 
						|
      .Case("68hc08", EM_68HC08)
 | 
						|
      .Case("68hc05", EM_68HC05)
 | 
						|
      .Case("svx", EM_SVX)
 | 
						|
      .Case("st19", EM_ST19)
 | 
						|
      .Case("vax", EM_VAX)
 | 
						|
      .Case("cris", EM_CRIS)
 | 
						|
      .Case("javelin", EM_JAVELIN)
 | 
						|
      .Case("firepath", EM_FIREPATH)
 | 
						|
      .Case("zsp", EM_ZSP)
 | 
						|
      .Case("mmix", EM_MMIX)
 | 
						|
      .Case("huany", EM_HUANY)
 | 
						|
      .Case("prism", EM_PRISM)
 | 
						|
      .Case("avr", EM_AVR)
 | 
						|
      .Case("fr30", EM_FR30)
 | 
						|
      .Case("d10v", EM_D10V)
 | 
						|
      .Case("d30v", EM_D30V)
 | 
						|
      .Case("v850", EM_V850)
 | 
						|
      .Case("m32r", EM_M32R)
 | 
						|
      .Case("mn10300", EM_MN10300)
 | 
						|
      .Case("mn10200", EM_MN10200)
 | 
						|
      .Case("pj", EM_PJ)
 | 
						|
      .Case("openrisc", EM_OPENRISC)
 | 
						|
      .Case("arc_compact", EM_ARC_COMPACT)
 | 
						|
      .Case("xtensa", EM_XTENSA)
 | 
						|
      .Case("videocore", EM_VIDEOCORE)
 | 
						|
      .Case("tmm_gpp", EM_TMM_GPP)
 | 
						|
      .Case("ns32k", EM_NS32K)
 | 
						|
      .Case("tpc", EM_TPC)
 | 
						|
      .Case("snp1k", EM_SNP1K)
 | 
						|
      .Case("st200", EM_ST200)
 | 
						|
      .Case("ip2k", EM_IP2K)
 | 
						|
      .Case("max", EM_MAX)
 | 
						|
      .Case("cr", EM_CR)
 | 
						|
      .Case("f2mc16", EM_F2MC16)
 | 
						|
      .Case("msp430", EM_MSP430)
 | 
						|
      .Case("blackfin", EM_BLACKFIN)
 | 
						|
      .Case("se_c33", EM_SE_C33)
 | 
						|
      .Case("sep", EM_SEP)
 | 
						|
      .Case("arca", EM_ARCA)
 | 
						|
      .Case("unicore", EM_UNICORE)
 | 
						|
      .Case("excess", EM_EXCESS)
 | 
						|
      .Case("dxp", EM_DXP)
 | 
						|
      .Case("altera_nios2", EM_ALTERA_NIOS2)
 | 
						|
      .Case("crx", EM_CRX)
 | 
						|
      .Case("xgate", EM_XGATE)
 | 
						|
      .Case("c166", EM_C166)
 | 
						|
      .Case("m16c", EM_M16C)
 | 
						|
      .Case("dspic30f", EM_DSPIC30F)
 | 
						|
      .Case("ce", EM_CE)
 | 
						|
      .Case("m32c", EM_M32C)
 | 
						|
      .Case("tsk3000", EM_TSK3000)
 | 
						|
      .Case("rs08", EM_RS08)
 | 
						|
      .Case("sharc", EM_SHARC)
 | 
						|
      .Case("ecog2", EM_ECOG2)
 | 
						|
      .Case("score7", EM_SCORE7)
 | 
						|
      .Case("dsp24", EM_DSP24)
 | 
						|
      .Case("videocore3", EM_VIDEOCORE3)
 | 
						|
      .Case("latticemico32", EM_LATTICEMICO32)
 | 
						|
      .Case("se_c17", EM_SE_C17)
 | 
						|
      .Case("ti_c6000", EM_TI_C6000)
 | 
						|
      .Case("ti_c2000", EM_TI_C2000)
 | 
						|
      .Case("ti_c5500", EM_TI_C5500)
 | 
						|
      .Case("mmdsp_plus", EM_MMDSP_PLUS)
 | 
						|
      .Case("cypress_m8c", EM_CYPRESS_M8C)
 | 
						|
      .Case("r32c", EM_R32C)
 | 
						|
      .Case("trimedia", EM_TRIMEDIA)
 | 
						|
      .Case("hexagon", EM_HEXAGON)
 | 
						|
      .Case("8051", EM_8051)
 | 
						|
      .Case("stxp7x", EM_STXP7X)
 | 
						|
      .Case("nds32", EM_NDS32)
 | 
						|
      .Case("ecog1", EM_ECOG1)
 | 
						|
      .Case("ecog1x", EM_ECOG1X)
 | 
						|
      .Case("maxq30", EM_MAXQ30)
 | 
						|
      .Case("ximo16", EM_XIMO16)
 | 
						|
      .Case("manik", EM_MANIK)
 | 
						|
      .Case("craynv2", EM_CRAYNV2)
 | 
						|
      .Case("rx", EM_RX)
 | 
						|
      .Case("metag", EM_METAG)
 | 
						|
      .Case("mcst_elbrus", EM_MCST_ELBRUS)
 | 
						|
      .Case("ecog16", EM_ECOG16)
 | 
						|
      .Case("cr16", EM_CR16)
 | 
						|
      .Case("etpu", EM_ETPU)
 | 
						|
      .Case("sle9x", EM_SLE9X)
 | 
						|
      .Case("l10m", EM_L10M)
 | 
						|
      .Case("k10m", EM_K10M)
 | 
						|
      .Case("aarch64", EM_AARCH64)
 | 
						|
      .Case("avr32", EM_AVR32)
 | 
						|
      .Case("stm8", EM_STM8)
 | 
						|
      .Case("tile64", EM_TILE64)
 | 
						|
      .Case("tilepro", EM_TILEPRO)
 | 
						|
      .Case("cuda", EM_CUDA)
 | 
						|
      .Case("tilegx", EM_TILEGX)
 | 
						|
      .Case("cloudshield", EM_CLOUDSHIELD)
 | 
						|
      .Case("corea_1st", EM_COREA_1ST)
 | 
						|
      .Case("corea_2nd", EM_COREA_2ND)
 | 
						|
      .Case("arc_compact2", EM_ARC_COMPACT2)
 | 
						|
      .Case("open8", EM_OPEN8)
 | 
						|
      .Case("rl78", EM_RL78)
 | 
						|
      .Case("videocore5", EM_VIDEOCORE5)
 | 
						|
      .Case("78kor", EM_78KOR)
 | 
						|
      .Case("56800ex", EM_56800EX)
 | 
						|
      .Case("ba1", EM_BA1)
 | 
						|
      .Case("ba2", EM_BA2)
 | 
						|
      .Case("xcore", EM_XCORE)
 | 
						|
      .Case("mchp_pic", EM_MCHP_PIC)
 | 
						|
      .Case("intel205", EM_INTEL205)
 | 
						|
      .Case("intel206", EM_INTEL206)
 | 
						|
      .Case("intel207", EM_INTEL207)
 | 
						|
      .Case("intel208", EM_INTEL208)
 | 
						|
      .Case("intel209", EM_INTEL209)
 | 
						|
      .Case("km32", EM_KM32)
 | 
						|
      .Case("kmx32", EM_KMX32)
 | 
						|
      .Case("kmx16", EM_KMX16)
 | 
						|
      .Case("kmx8", EM_KMX8)
 | 
						|
      .Case("kvarc", EM_KVARC)
 | 
						|
      .Case("cdp", EM_CDP)
 | 
						|
      .Case("coge", EM_COGE)
 | 
						|
      .Case("cool", EM_COOL)
 | 
						|
      .Case("norc", EM_NORC)
 | 
						|
      .Case("csr_kalimba", EM_CSR_KALIMBA)
 | 
						|
      .Case("amdgpu", EM_AMDGPU)
 | 
						|
      .Case("riscv", EM_RISCV)
 | 
						|
      .Case("lanai", EM_LANAI)
 | 
						|
      .Case("bpf", EM_BPF)
 | 
						|
      .Case("ve", EM_VE)
 | 
						|
      .Case("csky", EM_CSKY)
 | 
						|
      .Default(EM_NONE);
 | 
						|
}
 | 
						|
 | 
						|
/// Convert an ELF's e_machine value into an architecture name.
 | 
						|
StringRef ELF::convertEMachineToArchName(uint16_t EMachine) {
 | 
						|
  switch (EMachine) {
 | 
						|
  case EM_NONE:
 | 
						|
    return "None";
 | 
						|
  case EM_M32:
 | 
						|
    return "m32";
 | 
						|
  case EM_SPARC:
 | 
						|
    return "sparc";
 | 
						|
  case EM_386:
 | 
						|
    return "386";
 | 
						|
  case EM_68K:
 | 
						|
    return "68k";
 | 
						|
  case EM_88K:
 | 
						|
    return "88k";
 | 
						|
  case EM_IAMCU:
 | 
						|
    return "iamcu";
 | 
						|
  case EM_860:
 | 
						|
    return "860";
 | 
						|
  case EM_MIPS:
 | 
						|
    return "mips";
 | 
						|
  case EM_S370:
 | 
						|
    return "s370";
 | 
						|
  case EM_MIPS_RS3_LE:
 | 
						|
    return "mips_rs3_le";
 | 
						|
  case EM_PARISC:
 | 
						|
    return "parisc";
 | 
						|
  case EM_VPP500:
 | 
						|
    return "vpp500";
 | 
						|
  case EM_SPARC32PLUS:
 | 
						|
    return "sparc32plus";
 | 
						|
  case EM_960:
 | 
						|
    return "960";
 | 
						|
  case EM_PPC:
 | 
						|
    return "ppc";
 | 
						|
  case EM_PPC64:
 | 
						|
    return "ppc64";
 | 
						|
  case EM_S390:
 | 
						|
    return "s390";
 | 
						|
  case EM_SPU:
 | 
						|
    return "spu";
 | 
						|
  case EM_V800:
 | 
						|
    return "v800";
 | 
						|
  case EM_FR20:
 | 
						|
    return "fr20";
 | 
						|
  case EM_RH32:
 | 
						|
    return "rh32";
 | 
						|
  case EM_RCE:
 | 
						|
    return "rce";
 | 
						|
  case EM_ARM:
 | 
						|
    return "arm";
 | 
						|
  case EM_ALPHA:
 | 
						|
    return "alpha";
 | 
						|
  case EM_SH:
 | 
						|
    return "sh";
 | 
						|
  case EM_SPARCV9:
 | 
						|
    return "sparcv9";
 | 
						|
  case EM_TRICORE:
 | 
						|
    return "tricore";
 | 
						|
  case EM_ARC:
 | 
						|
    return "arc";
 | 
						|
  case EM_H8_300:
 | 
						|
    return "h8_300";
 | 
						|
  case EM_H8_300H:
 | 
						|
    return "h8_300h";
 | 
						|
  case EM_H8S:
 | 
						|
    return "h8s";
 | 
						|
  case EM_H8_500:
 | 
						|
    return "h8_500";
 | 
						|
  case EM_IA_64:
 | 
						|
    return "ia_64";
 | 
						|
  case EM_MIPS_X:
 | 
						|
    return "mips_x";
 | 
						|
  case EM_COLDFIRE:
 | 
						|
    return "coldfire";
 | 
						|
  case EM_68HC12:
 | 
						|
    return "68hc12";
 | 
						|
  case EM_MMA:
 | 
						|
    return "mma";
 | 
						|
  case EM_PCP:
 | 
						|
    return "pcp";
 | 
						|
  case EM_NCPU:
 | 
						|
    return "ncpu";
 | 
						|
  case EM_NDR1:
 | 
						|
    return "ndr1";
 | 
						|
  case EM_STARCORE:
 | 
						|
    return "starcore";
 | 
						|
  case EM_ME16:
 | 
						|
    return "me16";
 | 
						|
  case EM_ST100:
 | 
						|
    return "st100";
 | 
						|
  case EM_TINYJ:
 | 
						|
    return "tinyj";
 | 
						|
  case EM_X86_64:
 | 
						|
    return "x86_64";
 | 
						|
  case EM_PDSP:
 | 
						|
    return "pdsp";
 | 
						|
  case EM_PDP10:
 | 
						|
    return "pdp10";
 | 
						|
  case EM_PDP11:
 | 
						|
    return "pdp11";
 | 
						|
  case EM_FX66:
 | 
						|
    return "fx66";
 | 
						|
  case EM_ST9PLUS:
 | 
						|
    return "st9plus";
 | 
						|
  case EM_ST7:
 | 
						|
    return "st7";
 | 
						|
  case EM_68HC16:
 | 
						|
    return "68hc16";
 | 
						|
  case EM_68HC11:
 | 
						|
    return "68hc11";
 | 
						|
  case EM_68HC08:
 | 
						|
    return "68hc08";
 | 
						|
  case EM_68HC05:
 | 
						|
    return "68hc05";
 | 
						|
  case EM_SVX:
 | 
						|
    return "svx";
 | 
						|
  case EM_ST19:
 | 
						|
    return "st19";
 | 
						|
  case EM_VAX:
 | 
						|
    return "vax";
 | 
						|
  case EM_CRIS:
 | 
						|
    return "cris";
 | 
						|
  case EM_JAVELIN:
 | 
						|
    return "javelin";
 | 
						|
  case EM_FIREPATH:
 | 
						|
    return "firepath";
 | 
						|
  case EM_ZSP:
 | 
						|
    return "zsp";
 | 
						|
  case EM_MMIX:
 | 
						|
    return "mmix";
 | 
						|
  case EM_HUANY:
 | 
						|
    return "huany";
 | 
						|
  case EM_PRISM:
 | 
						|
    return "prism";
 | 
						|
  case EM_AVR:
 | 
						|
    return "avr";
 | 
						|
  case EM_FR30:
 | 
						|
    return "fr30";
 | 
						|
  case EM_D10V:
 | 
						|
    return "d10v";
 | 
						|
  case EM_D30V:
 | 
						|
    return "d30v";
 | 
						|
  case EM_V850:
 | 
						|
    return "v850";
 | 
						|
  case EM_M32R:
 | 
						|
    return "m32r";
 | 
						|
  case EM_MN10300:
 | 
						|
    return "mn10300";
 | 
						|
  case EM_MN10200:
 | 
						|
    return "mn10200";
 | 
						|
  case EM_PJ:
 | 
						|
    return "pj";
 | 
						|
  case EM_OPENRISC:
 | 
						|
    return "openrisc";
 | 
						|
  case EM_ARC_COMPACT:
 | 
						|
    return "arc_compact";
 | 
						|
  case EM_XTENSA:
 | 
						|
    return "xtensa";
 | 
						|
  case EM_VIDEOCORE:
 | 
						|
    return "videocore";
 | 
						|
  case EM_TMM_GPP:
 | 
						|
    return "tmm_gpp";
 | 
						|
  case EM_NS32K:
 | 
						|
    return "ns32k";
 | 
						|
  case EM_TPC:
 | 
						|
    return "tpc";
 | 
						|
  case EM_SNP1K:
 | 
						|
    return "snp1k";
 | 
						|
  case EM_ST200:
 | 
						|
    return "st200";
 | 
						|
  case EM_IP2K:
 | 
						|
    return "ip2k";
 | 
						|
  case EM_MAX:
 | 
						|
    return "max";
 | 
						|
  case EM_CR:
 | 
						|
    return "cr";
 | 
						|
  case EM_F2MC16:
 | 
						|
    return "f2mc16";
 | 
						|
  case EM_MSP430:
 | 
						|
    return "msp430";
 | 
						|
  case EM_BLACKFIN:
 | 
						|
    return "blackfin";
 | 
						|
  case EM_SE_C33:
 | 
						|
    return "se_c33";
 | 
						|
  case EM_SEP:
 | 
						|
    return "sep";
 | 
						|
  case EM_ARCA:
 | 
						|
    return "arca";
 | 
						|
  case EM_UNICORE:
 | 
						|
    return "unicore";
 | 
						|
  case EM_EXCESS:
 | 
						|
    return "excess";
 | 
						|
  case EM_DXP:
 | 
						|
    return "dxp";
 | 
						|
  case EM_ALTERA_NIOS2:
 | 
						|
    return "altera_nios2";
 | 
						|
  case EM_CRX:
 | 
						|
    return "crx";
 | 
						|
  case EM_XGATE:
 | 
						|
    return "xgate";
 | 
						|
  case EM_C166:
 | 
						|
    return "c166";
 | 
						|
  case EM_M16C:
 | 
						|
    return "m16c";
 | 
						|
  case EM_DSPIC30F:
 | 
						|
    return "dspic30f";
 | 
						|
  case EM_CE:
 | 
						|
    return "ce";
 | 
						|
  case EM_M32C:
 | 
						|
    return "m32c";
 | 
						|
  case EM_TSK3000:
 | 
						|
    return "tsk3000";
 | 
						|
  case EM_RS08:
 | 
						|
    return "rs08";
 | 
						|
  case EM_SHARC:
 | 
						|
    return "sharc";
 | 
						|
  case EM_ECOG2:
 | 
						|
    return "ecog2";
 | 
						|
  case EM_SCORE7:
 | 
						|
    return "score7";
 | 
						|
  case EM_DSP24:
 | 
						|
    return "dsp24";
 | 
						|
  case EM_VIDEOCORE3:
 | 
						|
    return "videocore3";
 | 
						|
  case EM_LATTICEMICO32:
 | 
						|
    return "latticemico32";
 | 
						|
  case EM_SE_C17:
 | 
						|
    return "se_c17";
 | 
						|
  case EM_TI_C6000:
 | 
						|
    return "ti_c6000";
 | 
						|
  case EM_TI_C2000:
 | 
						|
    return "ti_c2000";
 | 
						|
  case EM_TI_C5500:
 | 
						|
    return "ti_c5500";
 | 
						|
  case EM_MMDSP_PLUS:
 | 
						|
    return "mmdsp_plus";
 | 
						|
  case EM_CYPRESS_M8C:
 | 
						|
    return "cypress_m8c";
 | 
						|
  case EM_R32C:
 | 
						|
    return "r32c";
 | 
						|
  case EM_TRIMEDIA:
 | 
						|
    return "trimedia";
 | 
						|
  case EM_HEXAGON:
 | 
						|
    return "hexagon";
 | 
						|
  case EM_8051:
 | 
						|
    return "8051";
 | 
						|
  case EM_STXP7X:
 | 
						|
    return "stxp7x";
 | 
						|
  case EM_NDS32:
 | 
						|
    return "nds32";
 | 
						|
  case EM_ECOG1:
 | 
						|
    return "ecog1";
 | 
						|
  case EM_MAXQ30:
 | 
						|
    return "maxq30";
 | 
						|
  case EM_XIMO16:
 | 
						|
    return "ximo16";
 | 
						|
  case EM_MANIK:
 | 
						|
    return "manik";
 | 
						|
  case EM_CRAYNV2:
 | 
						|
    return "craynv2";
 | 
						|
  case EM_RX:
 | 
						|
    return "rx";
 | 
						|
  case EM_METAG:
 | 
						|
    return "metag";
 | 
						|
  case EM_MCST_ELBRUS:
 | 
						|
    return "mcst_elbrus";
 | 
						|
  case EM_ECOG16:
 | 
						|
    return "ecog16";
 | 
						|
  case EM_CR16:
 | 
						|
    return "cr16";
 | 
						|
  case EM_ETPU:
 | 
						|
    return "etpu";
 | 
						|
  case EM_SLE9X:
 | 
						|
    return "sle9x";
 | 
						|
  case EM_L10M:
 | 
						|
    return "l10m";
 | 
						|
  case EM_K10M:
 | 
						|
    return "k10m";
 | 
						|
  case EM_AARCH64:
 | 
						|
    return "AArch64";
 | 
						|
  case EM_AVR32:
 | 
						|
    return "avr32";
 | 
						|
  case EM_STM8:
 | 
						|
    return "stm8";
 | 
						|
  case EM_TILE64:
 | 
						|
    return "tile64";
 | 
						|
  case EM_TILEPRO:
 | 
						|
    return "tilepro";
 | 
						|
  case EM_CUDA:
 | 
						|
    return "cuda";
 | 
						|
  case EM_TILEGX:
 | 
						|
    return "tilegx";
 | 
						|
  case EM_CLOUDSHIELD:
 | 
						|
    return "cloudshield";
 | 
						|
  case EM_COREA_1ST:
 | 
						|
    return "corea_1st";
 | 
						|
  case EM_COREA_2ND:
 | 
						|
    return "corea_2nd";
 | 
						|
  case EM_ARC_COMPACT2:
 | 
						|
    return "arc_compact2";
 | 
						|
  case EM_OPEN8:
 | 
						|
    return "open8";
 | 
						|
  case EM_RL78:
 | 
						|
    return "rl78";
 | 
						|
  case EM_VIDEOCORE5:
 | 
						|
    return "videocore5";
 | 
						|
  case EM_78KOR:
 | 
						|
    return "78kor";
 | 
						|
  case EM_56800EX:
 | 
						|
    return "56800ex";
 | 
						|
  case EM_BA1:
 | 
						|
    return "ba1";
 | 
						|
  case EM_BA2:
 | 
						|
    return "ba2";
 | 
						|
  case EM_XCORE:
 | 
						|
    return "xcore";
 | 
						|
  case EM_MCHP_PIC:
 | 
						|
    return "mchp_pic";
 | 
						|
  case EM_INTEL205:
 | 
						|
    return "intel205";
 | 
						|
  case EM_INTEL206:
 | 
						|
    return "intel206";
 | 
						|
  case EM_INTEL207:
 | 
						|
    return "intel207";
 | 
						|
  case EM_INTEL208:
 | 
						|
    return "intel208";
 | 
						|
  case EM_INTEL209:
 | 
						|
    return "intel209";
 | 
						|
  case EM_KM32:
 | 
						|
    return "km32";
 | 
						|
  case EM_KMX32:
 | 
						|
    return "kmx32";
 | 
						|
  case EM_KMX16:
 | 
						|
    return "kmx16";
 | 
						|
  case EM_KMX8:
 | 
						|
    return "kmx8";
 | 
						|
  case EM_KVARC:
 | 
						|
    return "kvarc";
 | 
						|
  case EM_CDP:
 | 
						|
    return "cdp";
 | 
						|
  case EM_COGE:
 | 
						|
    return "coge";
 | 
						|
  case EM_COOL:
 | 
						|
    return "cool";
 | 
						|
  case EM_NORC:
 | 
						|
    return "norc";
 | 
						|
  case EM_CSR_KALIMBA:
 | 
						|
    return "csr_kalimba";
 | 
						|
  case EM_AMDGPU:
 | 
						|
    return "amdgpu";
 | 
						|
  case EM_RISCV:
 | 
						|
    return "riscv";
 | 
						|
  case EM_LANAI:
 | 
						|
    return "lanai";
 | 
						|
  case EM_BPF:
 | 
						|
    return "bpf";
 | 
						|
  case EM_VE:
 | 
						|
    return "ve";
 | 
						|
  case EM_CSKY:
 | 
						|
    return "csky";
 | 
						|
  default:
 | 
						|
    return "None";
 | 
						|
  }
 | 
						|
}
 |