15918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//===- ELFYAML.cpp - ELF YAMLIO implementation ----------------------------===//
25918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//
35918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//                     The LLVM Compiler Infrastructure
45918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//
55918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva// This file is distributed under the University of Illinois Open Source
65918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva// License. See LICENSE.TXT for details.
75918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//
85918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//===----------------------------------------------------------------------===//
95918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//
105918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva// This file defines classes for handling the YAML representation of ELF.
115918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//
125918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva//===----------------------------------------------------------------------===//
135918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
145918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#include "llvm/Object/ELFYAML.h"
15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/Support/Casting.h"
165918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
175918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvanamespace llvm {
18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesELFYAML::Section::~Section() {}
20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
215918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvanamespace yaml {
225918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
235918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid
245918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean SilvaScalarEnumerationTraits<ELFYAML::ELF_ET>::enumeration(IO &IO,
255918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva                                                      ELFYAML::ELF_ET &Value) {
265918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
275918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_NONE)
285918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_REL)
295918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_EXEC)
305918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_DYN)
315918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_CORE)
325918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase
335918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
345918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
355918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid
365918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean SilvaScalarEnumerationTraits<ELFYAML::ELF_EM>::enumeration(IO &IO,
375918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva                                                      ELFYAML::ELF_EM &Value) {
385918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
395918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NONE)
405918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_M32)
415918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SPARC)
425918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_386)
435918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68K)
445918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_88K)
455918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_486)
465918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_860)
475918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MIPS)
485918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_S370)
495918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MIPS_RS3_LE)
505918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PARISC)
515918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VPP500)
525918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SPARC32PLUS)
535918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_960)
545918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PPC)
555918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PPC64)
565918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_S390)
575918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SPU)
585918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_V800)
595918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_FR20)
605918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RH32)
615918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RCE)
625918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARM)
635918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ALPHA)
645918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SH)
655918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SPARCV9)
665918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TRICORE)
675918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARC)
685918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_H8_300)
695918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_H8_300H)
705918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_H8S)
715918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_H8_500)
725918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_IA_64)
735918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MIPS_X)
745918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_COLDFIRE)
755918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC12)
765918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MMA)
775918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PCP)
785918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NCPU)
795918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NDR1)
805918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_STARCORE)
815918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ME16)
825918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST100)
835918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TINYJ)
845918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_X86_64)
855918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PDSP)
865918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PDP10)
875918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PDP11)
885918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_FX66)
895918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST9PLUS)
905918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST7)
915918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC16)
925918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC11)
935918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC08)
945918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC05)
955918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SVX)
965918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST19)
975918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VAX)
985918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CRIS)
995918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_JAVELIN)
1005918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_FIREPATH)
1015918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ZSP)
1025918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MMIX)
1035918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_HUANY)
1045918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PRISM)
1055918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_AVR)
1065918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_FR30)
1075918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_D10V)
1085918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_D30V)
1095918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_V850)
1105918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_M32R)
1115918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MN10300)
1125918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MN10200)
1135918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PJ)
1145918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_OPENRISC)
1155918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARC_COMPACT)
1165918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_XTENSA)
1175918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VIDEOCORE)
1185918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TMM_GPP)
1195918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NS32K)
1205918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TPC)
1215918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SNP1K)
1225918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST200)
1235918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_IP2K)
1245918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MAX)
1255918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CR)
1265918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_F2MC16)
1275918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MSP430)
1285918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_BLACKFIN)
1295918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SE_C33)
1305918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SEP)
1315918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARCA)
1325918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_UNICORE)
1335918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_EXCESS)
1345918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_DXP)
1355918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ALTERA_NIOS2)
1365918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CRX)
1375918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_XGATE)
1385918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_C166)
1395918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_M16C)
1405918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_DSPIC30F)
1415918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CE)
1425918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_M32C)
1435918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TSK3000)
1445918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RS08)
1455918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SHARC)
1465918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ECOG2)
1475918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SCORE7)
1485918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_DSP24)
1495918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VIDEOCORE3)
1505918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_LATTICEMICO32)
1515918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SE_C17)
1525918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TI_C6000)
1535918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TI_C2000)
1545918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TI_C5500)
1555918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MMDSP_PLUS)
1565918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CYPRESS_M8C)
1575918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_R32C)
1585918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TRIMEDIA)
1595918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_HEXAGON)
1605918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_8051)
1615918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_STXP7X)
1625918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NDS32)
1635918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ECOG1)
1645918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ECOG1X)
1655918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MAXQ30)
1665918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_XIMO16)
1675918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MANIK)
1685918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CRAYNV2)
1695918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RX)
1705918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_METAG)
1715918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MCST_ELBRUS)
1725918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ECOG16)
1735918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CR16)
1745918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ETPU)
1755918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SLE9X)
1765918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_L10M)
1775918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_K10M)
1785918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_AARCH64)
1795918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_AVR32)
1805918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_STM8)
1815918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TILE64)
1825918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TILEPRO)
1835918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CUDA)
1845918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TILEGX)
1855918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CLOUDSHIELD)
1865918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_COREA_1ST)
1875918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_COREA_2ND)
1885918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARC_COMPACT2)
1895918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_OPEN8)
1905918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RL78)
1915918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VIDEOCORE5)
1925918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_78KOR)
1935918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_56800EX)
1945918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase
1955918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
1965918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
1975918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_ELFCLASS>::enumeration(
1985918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva    IO &IO, ELFYAML::ELF_ELFCLASS &Value) {
1995918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
2005918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  // Since the semantics of ELFCLASSNONE is "invalid", just don't accept it
2015918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  // here.
2025918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ELFCLASS32)
2035918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ELFCLASS64)
2045918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase
2055918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
2065918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
2075918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_ELFDATA>::enumeration(
2085918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva    IO &IO, ELFYAML::ELF_ELFDATA &Value) {
2095918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
2105918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  // Since the semantics of ELFDATANONE is "invalid", just don't accept it
2115918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  // here.
2125918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ELFDATA2LSB)
2135918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ELFDATA2MSB)
2145918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase
2155918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
2165918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
217ea94e114b436996805012f4395b0a9182aed2334Sean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_ELFOSABI>::enumeration(
218ea94e114b436996805012f4395b0a9182aed2334Sean Silva    IO &IO, ELFYAML::ELF_ELFOSABI &Value) {
219ea94e114b436996805012f4395b0a9182aed2334Sean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
220ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_NONE)
221ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_HPUX)
222ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_NETBSD)
223ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_GNU)
224ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_GNU)
225ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_HURD)
226ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_SOLARIS)
227ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_AIX)
228ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_IRIX)
229ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_FREEBSD)
230ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_TRU64)
231ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_MODESTO)
232ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_OPENBSD)
233ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_OPENVMS)
234ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_NSK)
235ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_AROS)
236ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_FENIXOS)
237ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_C6000_ELFABI)
238ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_C6000_LINUX)
239ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_ARM)
240ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_STANDALONE)
241ea94e114b436996805012f4395b0a9182aed2334Sean Silva#undef ECase
242ea94e114b436996805012f4395b0a9182aed2334Sean Silva}
243ea94e114b436996805012f4395b0a9182aed2334Sean Silva
24436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid ScalarBitSetTraits<ELFYAML::ELF_EF>::bitset(IO &IO,
24536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                                 ELFYAML::ELF_EF &Value) {
246dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const auto *Object = static_cast<ELFYAML::Object *>(IO.getContext());
247dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  assert(Object && "The IO context is not initialized");
24836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#define BCase(X) IO.bitSetCase(Value, #X, ELF::X);
249dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define BCaseMask(X, M) IO.maskedBitSetCase(Value, #X, ELF::X, ELF::M);
250dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  switch (Object->Header.Machine) {
251dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::EM_ARM:
252dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_ARM_SOFT_FLOAT)
253dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_ARM_VFP_FLOAT)
254dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_ARM_EABI_UNKNOWN, EF_ARM_EABIMASK)
255dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_ARM_EABI_VER1, EF_ARM_EABIMASK)
256dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_ARM_EABI_VER2, EF_ARM_EABIMASK)
257dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_ARM_EABI_VER3, EF_ARM_EABIMASK)
258dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_ARM_EABI_VER4, EF_ARM_EABIMASK)
259dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_ARM_EABI_VER5, EF_ARM_EABIMASK)
260dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    break;
261dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::EM_MIPS:
262dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_MIPS_NOREORDER)
263dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_MIPS_PIC)
264dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_MIPS_CPIC)
265dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_MIPS_ABI2)
266dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_MIPS_32BITMODE)
267dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_MIPS_ABI_O32)
268dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_MIPS_MICROMIPS)
269dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_MIPS_ARCH_ASE_M16)
270dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_1, EF_MIPS_ARCH)
271dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_2, EF_MIPS_ARCH)
272dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_3, EF_MIPS_ARCH)
273dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_4, EF_MIPS_ARCH)
274dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_5, EF_MIPS_ARCH)
275dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_32, EF_MIPS_ARCH)
276dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_64, EF_MIPS_ARCH)
277dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_32R2, EF_MIPS_ARCH)
278dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_64R2, EF_MIPS_ARCH)
279dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_32R6, EF_MIPS_ARCH)
280dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCaseMask(EF_MIPS_ARCH_64R6, EF_MIPS_ARCH)
281dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    break;
282dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::EM_HEXAGON:
283dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_HEXAGON_MACH_V2)
284dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_HEXAGON_MACH_V3)
285dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_HEXAGON_MACH_V4)
286dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_HEXAGON_MACH_V5)
287dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_HEXAGON_ISA_V2)
288dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_HEXAGON_ISA_V3)
289dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_HEXAGON_ISA_V4)
290dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    BCase(EF_HEXAGON_ISA_V5)
291dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    break;
292dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  default:
293dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    llvm_unreachable("Unsupported architecture");
294dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  }
29536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#undef BCase
296dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#undef BCaseMask
29736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
29836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
299274264ce2ba93d26702f7ebfe6aea121df44113fSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration(
300274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva    IO &IO, ELFYAML::ELF_SHT &Value) {
301274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
302274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_NULL)
303274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_PROGBITS)
304068463b714bd53fffd41322a5654b4f359c2166cSean Silva  // No SHT_SYMTAB. Use the top-level `Symbols` key instead.
305068463b714bd53fffd41322a5654b4f359c2166cSean Silva  // FIXME: Issue a diagnostic with this information.
306274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_STRTAB)
307274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_RELA)
308274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_HASH)
309274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_DYNAMIC)
310274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_NOTE)
311274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_NOBITS)
312274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_REL)
313274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_SHLIB)
314274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_DYNSYM)
315274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_INIT_ARRAY)
316274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_FINI_ARRAY)
317274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_PREINIT_ARRAY)
318274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_GROUP)
319274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_SYMTAB_SHNDX)
320dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_LOOS)
321dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_GNU_ATTRIBUTES)
322dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_GNU_HASH)
323dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_GNU_verdef)
324dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_GNU_verneed)
325dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_GNU_versym)
326dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_HIOS)
327dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_LOPROC)
328dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_ARM_EXIDX)
329dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_ARM_PREEMPTMAP)
330dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_ARM_ATTRIBUTES)
331dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_ARM_DEBUGOVERLAY)
332dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_ARM_OVERLAYSECTION)
333dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_HEX_ORDERED)
334dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_X86_64_UNWIND)
335dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_MIPS_REGINFO)
336dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ECase(SHT_MIPS_OPTIONS)
337274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#undef ECase
338274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva}
339274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva
340274264ce2ba93d26702f7ebfe6aea121df44113fSean Silvavoid ScalarBitSetTraits<ELFYAML::ELF_SHF>::bitset(IO &IO,
341274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva                                                  ELFYAML::ELF_SHF &Value) {
342274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#define BCase(X) IO.bitSetCase(Value, #X, ELF::X);
343274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_WRITE)
344274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_ALLOC)
345766f25306af343fb2784350cb4d8cd9ca180f0d3Benjamin Kramer  BCase(SHF_EXCLUDE)
346274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_EXECINSTR)
347274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_MERGE)
348274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_STRINGS)
349274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_INFO_LINK)
350274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_LINK_ORDER)
351274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_OS_NONCONFORMING)
352274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_GROUP)
353274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_TLS)
354274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#undef BCase
355274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva}
356274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva
3575ba1225fb074f8035668637292d994d4c39757d1Sean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_STT>::enumeration(
3585ba1225fb074f8035668637292d994d4c39757d1Sean Silva    IO &IO, ELFYAML::ELF_STT &Value) {
3595ba1225fb074f8035668637292d994d4c39757d1Sean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
3605ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_NOTYPE)
3615ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_OBJECT)
3625ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_FUNC)
3635ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_SECTION)
3645ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_FILE)
3655ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_COMMON)
3665ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_TLS)
3675ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_GNU_IFUNC)
3685ba1225fb074f8035668637292d994d4c39757d1Sean Silva#undef ECase
3695ba1225fb074f8035668637292d994d4c39757d1Sean Silva}
3705ba1225fb074f8035668637292d994d4c39757d1Sean Silva
371cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesvoid ScalarEnumerationTraits<ELFYAML::ELF_STV>::enumeration(
372cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    IO &IO, ELFYAML::ELF_STV &Value) {
373cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define ECase(X) IO.enumCase(Value, #X, ELF::X);
374cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  ECase(STV_DEFAULT)
375cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  ECase(STV_INTERNAL)
376cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  ECase(STV_HIDDEN)
377cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  ECase(STV_PROTECTED)
378cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#undef ECase
379cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines}
380cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines
381dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid ScalarEnumerationTraits<ELFYAML::ELF_REL>::enumeration(
382dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    IO &IO, ELFYAML::ELF_REL &Value) {
383dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const auto *Object = static_cast<ELFYAML::Object *>(IO.getContext());
384dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  assert(Object && "The IO context is not initialized");
385dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define ECase(X) IO.enumCase(Value, #X, ELF::X);
386dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  switch (Object->Header.Machine) {
387dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::EM_X86_64:
388dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_NONE)
389dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_64)
390dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_PC32)
391dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOT32)
392dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_PLT32)
393dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_COPY)
394dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GLOB_DAT)
395dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_JUMP_SLOT)
396dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_RELATIVE)
397dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOTPCREL)
398dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_32)
399dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_32S)
400dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_16)
401dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_PC16)
402dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_8)
403dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_PC8)
404dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_DTPMOD64)
405dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_DTPOFF64)
406dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_TPOFF64)
407dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_TLSGD)
408dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_TLSLD)
409dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_DTPOFF32)
410dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOTTPOFF)
411dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_TPOFF32)
412dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_PC64)
413dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOTOFF64)
414dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOTPC32)
415dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOT64)
416dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOTPCREL64)
417dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOTPC64)
418dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOTPLT64)
419dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_PLTOFF64)
420dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_SIZE32)
421dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_SIZE64)
422dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_GOTPC32_TLSDESC)
423dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_TLSDESC_CALL)
424dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_TLSDESC)
425dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_X86_64_IRELATIVE)
426dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    break;
427dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::EM_MIPS:
428dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_NONE)
429dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_16)
430dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_32)
431dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_REL32)
432dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_26)
433dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_HI16)
434dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_LO16)
435dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GPREL16)
436dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_LITERAL)
437dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GOT16)
438dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PC16)
439dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_CALL16)
440dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GPREL32)
441dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_UNUSED1)
442dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_UNUSED2)
443dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_SHIFT5)
444dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_SHIFT6)
445dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_64)
446dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GOT_DISP)
447dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GOT_PAGE)
448dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GOT_OFST)
449dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GOT_HI16)
450dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GOT_LO16)
451dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_SUB)
452dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_INSERT_A)
453dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_INSERT_B)
454dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_DELETE)
455dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_HIGHER)
456dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_HIGHEST)
457dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_CALL_HI16)
458dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_CALL_LO16)
459dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_SCN_DISP)
460dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_REL16)
461dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_ADD_IMMEDIATE)
462dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PJUMP)
463dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_RELGOT)
464dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_JALR)
465dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_DTPMOD32)
466dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_DTPREL32)
467dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_DTPMOD64)
468dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_DTPREL64)
469dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_GD)
470dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_LDM)
471dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_DTPREL_HI16)
472dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_DTPREL_LO16)
473dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_GOTTPREL)
474dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_TPREL32)
475dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_TPREL64)
476dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_TPREL_HI16)
477dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_TLS_TPREL_LO16)
478dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_GLOB_DAT)
479dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PC21_S2)
480dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PC26_S2)
481dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PC18_S3)
482dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PC19_S2)
483dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PCHI16)
484dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PCLO16)
485dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS16_GOT16)
486dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS16_HI16)
487dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS16_LO16)
488dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_COPY)
489dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_JUMP_SLOT)
490dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_26_S1)
491dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_HI16)
492dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_LO16)
493dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_GOT16)
494dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_PC16_S1)
495dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_CALL16)
496dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_GOT_DISP)
497dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_GOT_PAGE)
498dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_GOT_OFST)
499dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_TLS_GD)
500dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_TLS_LDM)
501dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_TLS_DTPREL_HI16)
502dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_TLS_DTPREL_LO16)
503dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_TLS_TPREL_HI16)
504dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MICROMIPS_TLS_TPREL_LO16)
505dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_NUM)
506dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_MIPS_PC32)
507dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    break;
508dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::EM_HEXAGON:
509dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_NONE)
510dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B22_PCREL)
511dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B15_PCREL)
512dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B7_PCREL)
513dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_LO16)
514dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_HI16)
515dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_32)
516dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_16)
517dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_8)
518dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GPREL16_0)
519dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GPREL16_1)
520dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GPREL16_2)
521dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GPREL16_3)
522dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_HL16)
523dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B13_PCREL)
524dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B9_PCREL)
525dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B32_PCREL_X)
526dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_32_6_X)
527dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B22_PCREL_X)
528dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B15_PCREL_X)
529dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B13_PCREL_X)
530dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B9_PCREL_X)
531dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_B7_PCREL_X)
532dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_16_X)
533dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_12_X)
534dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_11_X)
535dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_10_X)
536dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_9_X)
537dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_8_X)
538dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_7_X)
539dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_6_X)
540dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_32_PCREL)
541dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_COPY)
542dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GLOB_DAT)
543dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_JMP_SLOT)
544dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_RELATIVE)
545dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_PLT_B22_PCREL)
546dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOTREL_LO16)
547dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOTREL_HI16)
548dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOTREL_32)
549dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOT_LO16)
550dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOT_HI16)
551dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOT_32)
552dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOT_16)
553dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_DTPMOD_32)
554dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_DTPREL_LO16)
555dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_DTPREL_HI16)
556dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_DTPREL_32)
557dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_DTPREL_16)
558dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GD_PLT_B22_PCREL)
559dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GD_GOT_LO16)
560dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GD_GOT_HI16)
561dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GD_GOT_32)
562dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GD_GOT_16)
563dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_LO16)
564dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_HI16)
565dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_32)
566dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_GOT_LO16)
567dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_GOT_HI16)
568dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_GOT_32)
569dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_GOT_16)
570dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_TPREL_LO16)
571dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_TPREL_HI16)
572dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_TPREL_32)
573dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_TPREL_16)
574dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_6_PCREL_X)
575dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOTREL_32_6_X)
576dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOTREL_16_X)
577dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOTREL_11_X)
578dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOT_32_6_X)
579dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOT_16_X)
580dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GOT_11_X)
581dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_DTPREL_32_6_X)
582dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_DTPREL_16_X)
583dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_DTPREL_11_X)
584dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GD_GOT_32_6_X)
585dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GD_GOT_16_X)
586dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_GD_GOT_11_X)
587dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_32_6_X)
588dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_16_X)
589dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_GOT_32_6_X)
590dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_GOT_16_X)
591dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_IE_GOT_11_X)
592dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_TPREL_32_6_X)
593dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_TPREL_16_X)
594dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_HEX_TPREL_11_X)
595dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    break;
596dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::EM_386:
597dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_NONE)
598dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_32)
599dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_PC32)
600dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_GOT32)
601dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_PLT32)
602dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_COPY)
603dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_GLOB_DAT)
604dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_JUMP_SLOT)
605dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_RELATIVE)
606dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_GOTOFF)
607dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_GOTPC)
608dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_32PLT)
609dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_TPOFF)
610dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_IE)
611dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_GOTIE)
612dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_LE)
613dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_GD)
614dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_LDM)
615dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_16)
616dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_PC16)
617dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_8)
618dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_PC8)
619dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_GD_32)
620dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_GD_PUSH)
621dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_GD_CALL)
622dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_GD_POP)
623dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_LDM_32)
624dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_LDM_PUSH)
625dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_LDM_CALL)
626dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_LDM_POP)
627dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_LDO_32)
628dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_IE_32)
629dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_LE_32)
630dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_DTPMOD32)
631dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_DTPOFF32)
632dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_TPOFF32)
633dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_GOTDESC)
634dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_DESC_CALL)
635dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_TLS_DESC)
636dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_IRELATIVE)
637dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    ECase(R_386_NUM)
638dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    break;
639dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  default:
640dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    llvm_unreachable("Unsupported architecture");
641dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  }
642dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#undef ECase
643dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
644dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
6452fd163fcd19358703d0898c1e7924c536f57baa7Sean Silvavoid MappingTraits<ELFYAML::FileHeader>::mapping(IO &IO,
6462fd163fcd19358703d0898c1e7924c536f57baa7Sean Silva                                                 ELFYAML::FileHeader &FileHdr) {
647457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("Class", FileHdr.Class);
648457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("Data", FileHdr.Data);
649ea94e114b436996805012f4395b0a9182aed2334Sean Silva  IO.mapOptional("OSABI", FileHdr.OSABI, ELFYAML::ELF_ELFOSABI(0));
650457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("Type", FileHdr.Type);
651457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("Machine", FileHdr.Machine);
65236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  IO.mapOptional("Flags", FileHdr.Flags, ELFYAML::ELF_EF(0));
653457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapOptional("Entry", FileHdr.Entry, Hex64(0));
6545918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
6555918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
656afcf60fe15999ea07193118f447a34f41171e433Sean Silvavoid MappingTraits<ELFYAML::Symbol>::mapping(IO &IO, ELFYAML::Symbol &Symbol) {
657afcf60fe15999ea07193118f447a34f41171e433Sean Silva  IO.mapOptional("Name", Symbol.Name, StringRef());
6585ba1225fb074f8035668637292d994d4c39757d1Sean Silva  IO.mapOptional("Type", Symbol.Type, ELFYAML::ELF_STT(0));
6596525e92b32c52772f7d750ada7084245655629e6Sean Silva  IO.mapOptional("Section", Symbol.Section, StringRef());
660e38f640b22979994b42fb2f2aafc44cc39c20e8eSean Silva  IO.mapOptional("Value", Symbol.Value, Hex64(0));
661e38f640b22979994b42fb2f2aafc44cc39c20e8eSean Silva  IO.mapOptional("Size", Symbol.Size, Hex64(0));
662cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  IO.mapOptional("Visibility", Symbol.Visibility, ELFYAML::ELF_STV(0));
663afcf60fe15999ea07193118f447a34f41171e433Sean Silva}
664afcf60fe15999ea07193118f447a34f41171e433Sean Silva
6654235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silvavoid MappingTraits<ELFYAML::LocalGlobalWeakSymbols>::mapping(
6664235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva    IO &IO, ELFYAML::LocalGlobalWeakSymbols &Symbols) {
6674235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva  IO.mapOptional("Local", Symbols.Local);
6684235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva  IO.mapOptional("Global", Symbols.Global);
6694235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva  IO.mapOptional("Weak", Symbols.Weak);
6704235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva}
6714235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva
672dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesstatic void commonSectionMapping(IO &IO, ELFYAML::Section &Section) {
673274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  IO.mapOptional("Name", Section.Name, StringRef());
674274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  IO.mapRequired("Type", Section.Type);
675274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  IO.mapOptional("Flags", Section.Flags, ELFYAML::ELF_SHF(0));
67645b812d1a79f3f8642821e65a25d92e3d741a095Sean Silva  IO.mapOptional("Address", Section.Address, Hex64(0));
677dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.mapOptional("Link", Section.Link, StringRef());
67897d37e818153c6c5f844ddebaab26be324dbe41cSean Silva  IO.mapOptional("AddressAlign", Section.AddressAlign, Hex64(0));
679274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva}
680274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva
681dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesstatic void sectionMapping(IO &IO, ELFYAML::RawContentSection &Section) {
682dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  commonSectionMapping(IO, Section);
683dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.mapOptional("Content", Section.Content);
684dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.mapOptional("Size", Section.Size, Hex64(Section.Content.binary_size()));
685dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
686dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
687dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesstatic void sectionMapping(IO &IO, ELFYAML::RelocationSection &Section) {
688dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  commonSectionMapping(IO, Section);
689cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  IO.mapOptional("Info", Section.Info, StringRef());
690dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.mapOptional("Relocations", Section.Relocations);
691dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
692dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
693dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid MappingTraits<std::unique_ptr<ELFYAML::Section>>::mapping(
694dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    IO &IO, std::unique_ptr<ELFYAML::Section> &Section) {
695dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ELFYAML::ELF_SHT sectionType;
696dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  if (IO.outputting())
697dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    sectionType = Section->Type;
698dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  else
699dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    IO.mapRequired("Type", sectionType);
700dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
701dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  switch (sectionType) {
702dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::SHT_REL:
703dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  case ELF::SHT_RELA:
704dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    if (!IO.outputting())
705dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      Section.reset(new ELFYAML::RelocationSection());
706dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    sectionMapping(IO, *cast<ELFYAML::RelocationSection>(Section.get()));
707dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    break;
708dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  default:
709dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    if (!IO.outputting())
710dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      Section.reset(new ELFYAML::RawContentSection());
711dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    sectionMapping(IO, *cast<ELFYAML::RawContentSection>(Section.get()));
712dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  }
713dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
714dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
715dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesStringRef MappingTraits<std::unique_ptr<ELFYAML::Section>>::validate(
716dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    IO &io, std::unique_ptr<ELFYAML::Section> &Section) {
717dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const auto *RawSection = dyn_cast<ELFYAML::RawContentSection>(Section.get());
718dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  if (!RawSection || RawSection->Size >= RawSection->Content.binary_size())
719dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return StringRef();
720dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return "Section size must be greater or equal to the content size";
721dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
722dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
723dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid MappingTraits<ELFYAML::Relocation>::mapping(IO &IO,
724dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                                 ELFYAML::Relocation &Rel) {
725dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.mapRequired("Offset", Rel.Offset);
726dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.mapRequired("Symbol", Rel.Symbol);
727dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.mapRequired("Type", Rel.Type);
728dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.mapOptional("Addend", Rel.Addend);
729dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
730dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
7315918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid MappingTraits<ELFYAML::Object>::mapping(IO &IO, ELFYAML::Object &Object) {
732dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  assert(!IO.getContext() && "The IO context is initialized already");
733dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.setContext(&Object);
734457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("FileHeader", Object.Header);
735274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  IO.mapOptional("Sections", Object.Sections);
736068463b714bd53fffd41322a5654b4f359c2166cSean Silva  IO.mapOptional("Symbols", Object.Symbols);
737dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  IO.setContext(nullptr);
7385918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
7395918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
7405918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} // end namespace yaml
7415918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} // end namespace llvm
742