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"
155918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
165918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvanamespace llvm {
175918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvanamespace yaml {
185918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
195918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid
205918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean SilvaScalarEnumerationTraits<ELFYAML::ELF_ET>::enumeration(IO &IO,
215918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva                                                      ELFYAML::ELF_ET &Value) {
225918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
235918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_NONE)
245918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_REL)
255918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_EXEC)
265918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_DYN)
275918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ET_CORE)
285918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase
295918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
305918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
315918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid
325918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean SilvaScalarEnumerationTraits<ELFYAML::ELF_EM>::enumeration(IO &IO,
335918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva                                                      ELFYAML::ELF_EM &Value) {
345918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
355918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NONE)
365918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_M32)
375918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SPARC)
385918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_386)
395918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68K)
405918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_88K)
415918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_486)
425918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_860)
435918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MIPS)
445918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_S370)
455918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MIPS_RS3_LE)
465918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PARISC)
475918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VPP500)
485918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SPARC32PLUS)
495918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_960)
505918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PPC)
515918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PPC64)
525918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_S390)
535918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SPU)
545918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_V800)
555918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_FR20)
565918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RH32)
575918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RCE)
585918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARM)
595918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ALPHA)
605918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SH)
615918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SPARCV9)
625918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TRICORE)
635918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARC)
645918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_H8_300)
655918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_H8_300H)
665918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_H8S)
675918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_H8_500)
685918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_IA_64)
695918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MIPS_X)
705918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_COLDFIRE)
715918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC12)
725918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MMA)
735918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PCP)
745918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NCPU)
755918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NDR1)
765918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_STARCORE)
775918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ME16)
785918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST100)
795918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TINYJ)
805918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_X86_64)
815918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PDSP)
825918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PDP10)
835918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PDP11)
845918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_FX66)
855918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST9PLUS)
865918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST7)
875918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC16)
885918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC11)
895918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC08)
905918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_68HC05)
915918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SVX)
925918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST19)
935918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VAX)
945918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CRIS)
955918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_JAVELIN)
965918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_FIREPATH)
975918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ZSP)
985918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MMIX)
995918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_HUANY)
1005918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PRISM)
1015918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_AVR)
1025918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_FR30)
1035918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_D10V)
1045918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_D30V)
1055918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_V850)
1065918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_M32R)
1075918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MN10300)
1085918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MN10200)
1095918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_PJ)
1105918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_OPENRISC)
1115918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARC_COMPACT)
1125918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_XTENSA)
1135918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VIDEOCORE)
1145918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TMM_GPP)
1155918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NS32K)
1165918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TPC)
1175918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SNP1K)
1185918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ST200)
1195918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_IP2K)
1205918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MAX)
1215918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CR)
1225918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_F2MC16)
1235918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MSP430)
1245918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_BLACKFIN)
1255918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SE_C33)
1265918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SEP)
1275918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARCA)
1285918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_UNICORE)
1295918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_EXCESS)
1305918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_DXP)
1315918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ALTERA_NIOS2)
1325918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CRX)
1335918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_XGATE)
1345918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_C166)
1355918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_M16C)
1365918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_DSPIC30F)
1375918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CE)
1385918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_M32C)
1395918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TSK3000)
1405918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RS08)
1415918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SHARC)
1425918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ECOG2)
1435918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SCORE7)
1445918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_DSP24)
1455918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VIDEOCORE3)
1465918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_LATTICEMICO32)
1475918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SE_C17)
1485918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TI_C6000)
1495918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TI_C2000)
1505918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TI_C5500)
1515918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MMDSP_PLUS)
1525918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CYPRESS_M8C)
1535918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_R32C)
1545918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TRIMEDIA)
1555918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_HEXAGON)
1565918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_8051)
1575918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_STXP7X)
1585918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_NDS32)
1595918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ECOG1)
1605918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ECOG1X)
1615918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MAXQ30)
1625918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_XIMO16)
1635918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MANIK)
1645918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CRAYNV2)
1655918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RX)
1665918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_METAG)
1675918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_MCST_ELBRUS)
1685918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ECOG16)
1695918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CR16)
1705918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ETPU)
1715918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_SLE9X)
1725918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_L10M)
1735918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_K10M)
1745918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_AARCH64)
1755918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_AVR32)
1765918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_STM8)
1775918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TILE64)
1785918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TILEPRO)
1795918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CUDA)
1805918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_TILEGX)
1815918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_CLOUDSHIELD)
1825918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_COREA_1ST)
1835918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_COREA_2ND)
1845918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_ARC_COMPACT2)
1855918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_OPEN8)
1865918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_RL78)
1875918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_VIDEOCORE5)
1885918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_78KOR)
1895918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(EM_56800EX)
1905918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase
1915918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
1925918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
1935918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_ELFCLASS>::enumeration(
1945918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva    IO &IO, ELFYAML::ELF_ELFCLASS &Value) {
1955918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
1965918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  // Since the semantics of ELFCLASSNONE is "invalid", just don't accept it
1975918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  // here.
1985918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ELFCLASS32)
1995918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ELFCLASS64)
2005918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase
2015918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
2025918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
2035918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_ELFDATA>::enumeration(
2045918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva    IO &IO, ELFYAML::ELF_ELFDATA &Value) {
2055918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
2065918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  // Since the semantics of ELFDATANONE is "invalid", just don't accept it
2075918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  // here.
2085918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ELFDATA2LSB)
2095918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva  ECase(ELFDATA2MSB)
2105918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase
2115918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
2125918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
213ea94e114b436996805012f4395b0a9182aed2334Sean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_ELFOSABI>::enumeration(
214ea94e114b436996805012f4395b0a9182aed2334Sean Silva    IO &IO, ELFYAML::ELF_ELFOSABI &Value) {
215ea94e114b436996805012f4395b0a9182aed2334Sean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
216ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_NONE)
217ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_HPUX)
218ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_NETBSD)
219ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_GNU)
220ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_GNU)
221ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_HURD)
222ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_SOLARIS)
223ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_AIX)
224ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_IRIX)
225ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_FREEBSD)
226ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_TRU64)
227ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_MODESTO)
228ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_OPENBSD)
229ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_OPENVMS)
230ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_NSK)
231ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_AROS)
232ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_FENIXOS)
233ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_C6000_ELFABI)
234ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_C6000_LINUX)
235ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_ARM)
236ea94e114b436996805012f4395b0a9182aed2334Sean Silva  ECase(ELFOSABI_STANDALONE)
237ea94e114b436996805012f4395b0a9182aed2334Sean Silva#undef ECase
238ea94e114b436996805012f4395b0a9182aed2334Sean Silva}
239ea94e114b436996805012f4395b0a9182aed2334Sean Silva
240274264ce2ba93d26702f7ebfe6aea121df44113fSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration(
241274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva    IO &IO, ELFYAML::ELF_SHT &Value) {
242274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
243274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_NULL)
244274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_PROGBITS)
245068463b714bd53fffd41322a5654b4f359c2166cSean Silva  // No SHT_SYMTAB. Use the top-level `Symbols` key instead.
246068463b714bd53fffd41322a5654b4f359c2166cSean Silva  // FIXME: Issue a diagnostic with this information.
247274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_STRTAB)
248274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_RELA)
249274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_HASH)
250274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_DYNAMIC)
251274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_NOTE)
252274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_NOBITS)
253274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_REL)
254274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_SHLIB)
255274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_DYNSYM)
256274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_INIT_ARRAY)
257274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_FINI_ARRAY)
258274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_PREINIT_ARRAY)
259274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_GROUP)
260274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  ECase(SHT_SYMTAB_SHNDX)
261274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#undef ECase
262274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva}
263274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva
264274264ce2ba93d26702f7ebfe6aea121df44113fSean Silvavoid ScalarBitSetTraits<ELFYAML::ELF_SHF>::bitset(IO &IO,
265274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva                                                  ELFYAML::ELF_SHF &Value) {
266274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#define BCase(X) IO.bitSetCase(Value, #X, ELF::X);
267274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_WRITE)
268274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_ALLOC)
269274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_EXECINSTR)
270274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_MERGE)
271274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_STRINGS)
272274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_INFO_LINK)
273274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_LINK_ORDER)
274274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_OS_NONCONFORMING)
275274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_GROUP)
276274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  BCase(SHF_TLS)
277274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#undef BCase
278274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva}
279274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva
2805ba1225fb074f8035668637292d994d4c39757d1Sean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_STT>::enumeration(
2815ba1225fb074f8035668637292d994d4c39757d1Sean Silva    IO &IO, ELFYAML::ELF_STT &Value) {
2825ba1225fb074f8035668637292d994d4c39757d1Sean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X);
2835ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_NOTYPE)
2845ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_OBJECT)
2855ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_FUNC)
2865ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_SECTION)
2875ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_FILE)
2885ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_COMMON)
2895ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_TLS)
2905ba1225fb074f8035668637292d994d4c39757d1Sean Silva  ECase(STT_GNU_IFUNC)
2915ba1225fb074f8035668637292d994d4c39757d1Sean Silva#undef ECase
2925ba1225fb074f8035668637292d994d4c39757d1Sean Silva}
2935ba1225fb074f8035668637292d994d4c39757d1Sean Silva
2942fd163fcd19358703d0898c1e7924c536f57baa7Sean Silvavoid MappingTraits<ELFYAML::FileHeader>::mapping(IO &IO,
2952fd163fcd19358703d0898c1e7924c536f57baa7Sean Silva                                                 ELFYAML::FileHeader &FileHdr) {
296457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("Class", FileHdr.Class);
297457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("Data", FileHdr.Data);
298ea94e114b436996805012f4395b0a9182aed2334Sean Silva  IO.mapOptional("OSABI", FileHdr.OSABI, ELFYAML::ELF_ELFOSABI(0));
299457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("Type", FileHdr.Type);
300457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("Machine", FileHdr.Machine);
301457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapOptional("Entry", FileHdr.Entry, Hex64(0));
3025918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
3035918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
304afcf60fe15999ea07193118f447a34f41171e433Sean Silvavoid MappingTraits<ELFYAML::Symbol>::mapping(IO &IO, ELFYAML::Symbol &Symbol) {
305afcf60fe15999ea07193118f447a34f41171e433Sean Silva  IO.mapOptional("Name", Symbol.Name, StringRef());
3065ba1225fb074f8035668637292d994d4c39757d1Sean Silva  IO.mapOptional("Type", Symbol.Type, ELFYAML::ELF_STT(0));
3076525e92b32c52772f7d750ada7084245655629e6Sean Silva  IO.mapOptional("Section", Symbol.Section, StringRef());
308e38f640b22979994b42fb2f2aafc44cc39c20e8eSean Silva  IO.mapOptional("Value", Symbol.Value, Hex64(0));
309e38f640b22979994b42fb2f2aafc44cc39c20e8eSean Silva  IO.mapOptional("Size", Symbol.Size, Hex64(0));
310afcf60fe15999ea07193118f447a34f41171e433Sean Silva}
311afcf60fe15999ea07193118f447a34f41171e433Sean Silva
3124235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silvavoid MappingTraits<ELFYAML::LocalGlobalWeakSymbols>::mapping(
3134235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva    IO &IO, ELFYAML::LocalGlobalWeakSymbols &Symbols) {
3144235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva  IO.mapOptional("Local", Symbols.Local);
3154235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva  IO.mapOptional("Global", Symbols.Global);
3164235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva  IO.mapOptional("Weak", Symbols.Weak);
3174235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva}
3184235ba32f2610ee2ed1e0c4bfca5c67835e9f97dSean Silva
319274264ce2ba93d26702f7ebfe6aea121df44113fSean Silvavoid MappingTraits<ELFYAML::Section>::mapping(IO &IO,
320274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva                                              ELFYAML::Section &Section) {
321274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  IO.mapOptional("Name", Section.Name, StringRef());
322274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  IO.mapRequired("Type", Section.Type);
323274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  IO.mapOptional("Flags", Section.Flags, ELFYAML::ELF_SHF(0));
32445b812d1a79f3f8642821e65a25d92e3d741a095Sean Silva  IO.mapOptional("Address", Section.Address, Hex64(0));
3252a7e79a30f87be4103963e6049a2f1cf171f502cSean Silva  IO.mapOptional("Content", Section.Content);
326fe57e347a57d643bbbcc9c19c8267a3e8c06b5a6Sean Silva  IO.mapOptional("Link", Section.Link);
32797d37e818153c6c5f844ddebaab26be324dbe41cSean Silva  IO.mapOptional("AddressAlign", Section.AddressAlign, Hex64(0));
328274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva}
329274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva
3305918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid MappingTraits<ELFYAML::Object>::mapping(IO &IO, ELFYAML::Object &Object) {
331457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva  IO.mapRequired("FileHeader", Object.Header);
332274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva  IO.mapOptional("Sections", Object.Sections);
333068463b714bd53fffd41322a5654b4f359c2166cSean Silva  IO.mapOptional("Symbols", Object.Symbols);
3345918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva}
3355918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva
3365918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} // end namespace yaml
3375918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} // end namespace llvm
338