ELFYAML.cpp revision afcf60fe15999ea07193118f447a34f41171e433
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_MICROBLAZE) 1805918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_CUDA) 1815918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_TILEGX) 1825918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_CLOUDSHIELD) 1835918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_COREA_1ST) 1845918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_COREA_2ND) 1855918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_ARC_COMPACT2) 1865918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_OPEN8) 1875918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_RL78) 1885918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_VIDEOCORE5) 1895918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_78KOR) 1905918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_56800EX) 1915918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(EM_MBLAZE) 1925918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase 1935918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} 1945918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva 1955918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_ELFCLASS>::enumeration( 1965918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva IO &IO, ELFYAML::ELF_ELFCLASS &Value) { 1975918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X); 1985918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva // Since the semantics of ELFCLASSNONE is "invalid", just don't accept it 1995918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva // here. 2005918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(ELFCLASS32) 2015918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(ELFCLASS64) 2025918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase 2035918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} 2045918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva 2055918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_ELFDATA>::enumeration( 2065918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva IO &IO, ELFYAML::ELF_ELFDATA &Value) { 2075918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X); 2085918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva // Since the semantics of ELFDATANONE is "invalid", just don't accept it 2095918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva // here. 2105918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(ELFDATA2LSB) 2115918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva ECase(ELFDATA2MSB) 2125918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva#undef ECase 2135918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} 2145918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva 215274264ce2ba93d26702f7ebfe6aea121df44113fSean Silvavoid ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration( 216274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva IO &IO, ELFYAML::ELF_SHT &Value) { 217274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#define ECase(X) IO.enumCase(Value, #X, ELF::X); 218274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_NULL) 219274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_PROGBITS) 220274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_SYMTAB) 221274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_STRTAB) 222274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_RELA) 223274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_HASH) 224274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_DYNAMIC) 225274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_NOTE) 226274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_NOBITS) 227274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_REL) 228274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_SHLIB) 229274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_DYNSYM) 230274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_INIT_ARRAY) 231274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_FINI_ARRAY) 232274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_PREINIT_ARRAY) 233274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_GROUP) 234274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ECase(SHT_SYMTAB_SHNDX) 235274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#undef ECase 236274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva} 237274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva 238274264ce2ba93d26702f7ebfe6aea121df44113fSean Silvavoid ScalarBitSetTraits<ELFYAML::ELF_SHF>::bitset(IO &IO, 239274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ELFYAML::ELF_SHF &Value) { 240274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#define BCase(X) IO.bitSetCase(Value, #X, ELF::X); 241274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_WRITE) 242274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_ALLOC) 243274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_EXECINSTR) 244274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_MERGE) 245274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_STRINGS) 246274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_INFO_LINK) 247274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_LINK_ORDER) 248274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_OS_NONCONFORMING) 249274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_GROUP) 250274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva BCase(SHF_TLS) 251274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva#undef BCase 252274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva} 253274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva 2542fd163fcd19358703d0898c1e7924c536f57baa7Sean Silvavoid MappingTraits<ELFYAML::FileHeader>::mapping(IO &IO, 2552fd163fcd19358703d0898c1e7924c536f57baa7Sean Silva ELFYAML::FileHeader &FileHdr) { 256457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva IO.mapRequired("Class", FileHdr.Class); 257457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva IO.mapRequired("Data", FileHdr.Data); 258457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva IO.mapRequired("Type", FileHdr.Type); 259457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva IO.mapRequired("Machine", FileHdr.Machine); 260457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva IO.mapOptional("Entry", FileHdr.Entry, Hex64(0)); 2615918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} 2625918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva 263afcf60fe15999ea07193118f447a34f41171e433Sean Silvavoid MappingTraits<ELFYAML::Symbol>::mapping(IO &IO, ELFYAML::Symbol &Symbol) { 264afcf60fe15999ea07193118f447a34f41171e433Sean Silva IO.mapOptional("Name", Symbol.Name, StringRef()); 265afcf60fe15999ea07193118f447a34f41171e433Sean Silva} 266afcf60fe15999ea07193118f447a34f41171e433Sean Silva 267274264ce2ba93d26702f7ebfe6aea121df44113fSean Silvavoid MappingTraits<ELFYAML::Section>::mapping(IO &IO, 268274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva ELFYAML::Section &Section) { 269274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva IO.mapOptional("Name", Section.Name, StringRef()); 270274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva IO.mapRequired("Type", Section.Type); 271274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva IO.mapOptional("Flags", Section.Flags, ELFYAML::ELF_SHF(0)); 27245b812d1a79f3f8642821e65a25d92e3d741a095Sean Silva IO.mapOptional("Address", Section.Address, Hex64(0)); 2732a7e79a30f87be4103963e6049a2f1cf171f502cSean Silva IO.mapOptional("Content", Section.Content); 274fe57e347a57d643bbbcc9c19c8267a3e8c06b5a6Sean Silva IO.mapOptional("Link", Section.Link); 27597d37e818153c6c5f844ddebaab26be324dbe41cSean Silva IO.mapOptional("AddressAlign", Section.AddressAlign, Hex64(0)); 276afcf60fe15999ea07193118f447a34f41171e433Sean Silva // TODO: Error if `Type` is SHT_SYMTAB and this is not present, or if 277afcf60fe15999ea07193118f447a34f41171e433Sean Silva // `Type` is *not* SHT_SYMTAB and this *is* present. (By SHT_SYMTAB I 278afcf60fe15999ea07193118f447a34f41171e433Sean Silva // also mean SHT_DYNSYM, but for simplicity right now we just do 279afcf60fe15999ea07193118f447a34f41171e433Sean Silva // SHT_SYMTAB). Want to be able to share the predicate with consumers of 280afcf60fe15999ea07193118f447a34f41171e433Sean Silva // this structure. 281afcf60fe15999ea07193118f447a34f41171e433Sean Silva IO.mapOptional("Symbols", Section.Symbols); 282274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva} 283274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva 2845918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silvavoid MappingTraits<ELFYAML::Object>::mapping(IO &IO, ELFYAML::Object &Object) { 285457c8ebfd070eb7ee840ec97142f975974cfc834Sean Silva IO.mapRequired("FileHeader", Object.Header); 286274264ce2ba93d26702f7ebfe6aea121df44113fSean Silva IO.mapOptional("Sections", Object.Sections); 2875918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} 2885918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva 2895918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} // end namespace yaml 2905918b7a03d4d6a52e18f7c102250c9cfd6ae52ddSean Silva} // end namespace llvm 291