COFFYAML.cpp revision e3a0e7f29dde261ca00835e763e26de41a8684f6
12bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola//===- COFFYAML.cpp - COFF YAMLIO implementation --------------------------===// 22bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// 32bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// The LLVM Compiler Infrastructure 42bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// 52bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// This file is distributed under the University of Illinois Open Source 62bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// License. See LICENSE.TXT for details. 72bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// 82bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola//===----------------------------------------------------------------------===// 92bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// 102bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// This file defines classes for handling the YAML representation of COFF. 112bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola// 122bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola//===----------------------------------------------------------------------===// 132bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 1406120815a252676ea8abfddf4f80f549ef9a9f06Rafael Espindola#include "llvm/Object/COFFYAML.h" 152bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 162bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola#define ECase(X) IO.enumCase(Value, #X, COFF::X); 172bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolanamespace llvm { 182bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 192bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolanamespace COFFYAML { 202bbe3781471936fa0c37ad738fa86b72997c6831Rafael EspindolaSection::Section() { memset(&Header, 0, sizeof(COFF::section)); } 212bbe3781471936fa0c37ad738fa86b72997c6831Rafael EspindolaSymbol::Symbol() { memset(&Header, 0, sizeof(COFF::symbol)); } 222bbe3781471936fa0c37ad738fa86b72997c6831Rafael EspindolaObject::Object() { memset(&Header, 0, sizeof(COFF::header)); } 232bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 242bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 252bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolanamespace yaml { 262bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid ScalarEnumerationTraits<COFF::MachineTypes>::enumeration( 272bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO &IO, COFF::MachineTypes &Value) { 282bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_UNKNOWN); 292bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_AM33); 302bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_AMD64); 312bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_ARM); 322bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_ARMV7); 332bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_EBC); 342bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_I386); 352bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_IA64); 362bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_M32R); 372bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_MIPS16); 382bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_MIPSFPU); 392bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_MIPSFPU16); 402bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_POWERPC); 412bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_POWERPCFP); 422bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_R4000); 432bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_SH3); 442bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_SH3DSP); 452bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_SH4); 462bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_SH5); 472bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_THUMB); 482bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_FILE_MACHINE_WCEMIPSV2); 492bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 502bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 512bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid ScalarEnumerationTraits<COFF::SymbolBaseType>::enumeration( 522bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO &IO, COFF::SymbolBaseType &Value) { 532bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_NULL); 542bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_VOID); 552bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_CHAR); 562bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_SHORT); 572bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_INT); 582bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_LONG); 592bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_FLOAT); 602bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_DOUBLE); 612bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_STRUCT); 622bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_UNION); 632bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_ENUM); 642bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_MOE); 652bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_BYTE); 662bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_WORD); 672bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_UINT); 682bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_TYPE_DWORD); 692bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 702bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 712bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid ScalarEnumerationTraits<COFF::SymbolStorageClass>::enumeration( 722bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO &IO, COFF::SymbolStorageClass &Value) { 732bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_END_OF_FUNCTION); 742bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_NULL); 752bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_AUTOMATIC); 762bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_EXTERNAL); 772bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_STATIC); 782bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_REGISTER); 792bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_EXTERNAL_DEF); 802bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_LABEL); 812bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_UNDEFINED_LABEL); 822bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_MEMBER_OF_STRUCT); 832bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_ARGUMENT); 842bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_STRUCT_TAG); 852bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_MEMBER_OF_UNION); 862bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_UNION_TAG); 872bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_TYPE_DEFINITION); 882bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_UNDEFINED_STATIC); 892bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_ENUM_TAG); 902bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_MEMBER_OF_ENUM); 912bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_REGISTER_PARAM); 922bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_BIT_FIELD); 932bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_BLOCK); 942bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_FUNCTION); 952bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_END_OF_STRUCT); 962bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_FILE); 972bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_SECTION); 982bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_WEAK_EXTERNAL); 992bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_CLASS_CLR_TOKEN); 1002bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 1012bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 1022bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid ScalarEnumerationTraits<COFF::SymbolComplexType>::enumeration( 1032bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO &IO, COFF::SymbolComplexType &Value) { 1042bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_DTYPE_NULL); 1052bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_DTYPE_POINTER); 1062bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_DTYPE_FUNCTION); 1072bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_SYM_DTYPE_ARRAY); 1082bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 1092bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 1102bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid ScalarEnumerationTraits<COFF::RelocationTypeX86>::enumeration( 1112bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO &IO, COFF::RelocationTypeX86 &Value) { 1122bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_ABSOLUTE); 1132bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_DIR16); 1142bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_REL16); 1152bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_DIR32); 1162bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_DIR32NB); 1172bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_SEG12); 1182bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_SECTION); 1192bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_SECREL); 1202bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_TOKEN); 1212bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_SECREL7); 1222bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_I386_REL32); 1232bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_ABSOLUTE); 1242bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_ADDR64); 1252bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_ADDR32); 1262bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_ADDR32NB); 1272bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_REL32); 1282bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_REL32_1); 1292bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_REL32_2); 1302bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_REL32_3); 1312bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_REL32_4); 1322bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_REL32_5); 1332bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_SECTION); 1342bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_SECREL); 1352bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_SECREL7); 1362bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_TOKEN); 1372bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_SREL32); 1382bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_PAIR); 1392bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola ECase(IMAGE_REL_AMD64_SSPAN32); 1402bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 1412bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola#undef ECase 1422bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 1432bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola#define BCase(X) IO.bitSetCase(Value, #X, COFF::X); 1442bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid ScalarBitSetTraits<COFF::Characteristics>::bitset( 1452bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO &IO, COFF::Characteristics &Value) { 1462bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_RELOCS_STRIPPED); 1472bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_EXECUTABLE_IMAGE); 1482bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_LINE_NUMS_STRIPPED); 1492bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_LOCAL_SYMS_STRIPPED); 1502bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_AGGRESSIVE_WS_TRIM); 1512bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_LARGE_ADDRESS_AWARE); 1522bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_BYTES_REVERSED_LO); 1532bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_32BIT_MACHINE); 1542bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_DEBUG_STRIPPED); 1552bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP); 1562bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_NET_RUN_FROM_SWAP); 1572bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_SYSTEM); 1582bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_DLL); 1592bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_UP_SYSTEM_ONLY); 1602bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_FILE_BYTES_REVERSED_HI); 1612bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 1622bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 1632bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid ScalarBitSetTraits<COFF::SectionCharacteristics>::bitset( 1642bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO &IO, COFF::SectionCharacteristics &Value) { 1652bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_TYPE_NO_PAD); 1662bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_CNT_CODE); 1672bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_CNT_INITIALIZED_DATA); 1682bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_CNT_UNINITIALIZED_DATA); 1692bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_LNK_OTHER); 1702bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_LNK_INFO); 1712bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_LNK_REMOVE); 1722bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_LNK_COMDAT); 1732bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_GPREL); 1742bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_PURGEABLE); 1752bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_16BIT); 1762bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_LOCKED); 1772bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_PRELOAD); 1782bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_LNK_NRELOC_OVFL); 1792bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_DISCARDABLE); 1802bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_NOT_CACHED); 1812bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_NOT_PAGED); 1822bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_SHARED); 1832bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_EXECUTE); 1842bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_READ); 1852bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola BCase(IMAGE_SCN_MEM_WRITE); 1862bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 1872bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola#undef BCase 1882bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 1892bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolanamespace { 1902bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolastruct NSectionCharacteristics { 1912bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NSectionCharacteristics(IO &) 1922bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola : Characteristics(COFF::SectionCharacteristics(0)) {} 1932bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NSectionCharacteristics(IO &, uint32_t C) 1942bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola : Characteristics(COFF::SectionCharacteristics(C)) {} 1952bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola uint32_t denormalize(IO &) { return Characteristics; } 1962bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola COFF::SectionCharacteristics Characteristics; 1972bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola}; 1982bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 1992bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolastruct NStorageClass { 2002bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NStorageClass(IO &) : StorageClass(COFF::SymbolStorageClass(0)) {} 2012bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NStorageClass(IO &, uint8_t S) : StorageClass(COFF::SymbolStorageClass(S)) {} 2022bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola uint8_t denormalize(IO &) { return StorageClass; } 2032bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2042bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola COFF::SymbolStorageClass StorageClass; 2052bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola}; 2062bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2072bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolastruct NMachine { 2082bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NMachine(IO &) : Machine(COFF::MachineTypes(0)) {} 2092bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NMachine(IO &, uint16_t M) : Machine(COFF::MachineTypes(M)) {} 2102bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola uint16_t denormalize(IO &) { return Machine; } 2112bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola COFF::MachineTypes Machine; 2122bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola}; 2132bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2142bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolastruct NHeaderCharacteristics { 2152bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NHeaderCharacteristics(IO &) : Characteristics(COFF::Characteristics(0)) {} 2162bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NHeaderCharacteristics(IO &, uint16_t C) 2172bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola : Characteristics(COFF::Characteristics(C)) {} 2182bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola uint16_t denormalize(IO &) { return Characteristics; } 2192bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2202bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola COFF::Characteristics Characteristics; 2212bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola}; 2222bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2232bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolastruct NType { 2242bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NType(IO &) : Type(COFF::RelocationTypeX86(0)) {} 2252bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola NType(IO &, uint16_t T) : Type(COFF::RelocationTypeX86(T)) {} 2262bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola uint16_t denormalize(IO &) { return Type; } 2272bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola COFF::RelocationTypeX86 Type; 2282bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola}; 2292bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2302bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 2312bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 232e3a0e7f29dde261ca00835e763e26de41a8684f6Rafael Espindolavoid MappingTraits<COFFYAML::Relocation>::mapping(IO &IO, 233e3a0e7f29dde261ca00835e763e26de41a8684f6Rafael Espindola COFFYAML::Relocation &Rel) { 2342bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola MappingNormalization<NType, uint16_t> NT(IO, Rel.Type); 2352bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2362bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("VirtualAddress", Rel.VirtualAddress); 237e3a0e7f29dde261ca00835e763e26de41a8684f6Rafael Espindola IO.mapRequired("SymbolName", Rel.SymbolName); 2382bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("Type", NT->Type); 2392bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 2402bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2412bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid MappingTraits<COFF::header>::mapping(IO &IO, COFF::header &H) { 2422bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola MappingNormalization<NMachine, uint16_t> NM(IO, H.Machine); 2432bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola MappingNormalization<NHeaderCharacteristics, uint16_t> NC(IO, 2442bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola H.Characteristics); 2452bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2462bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("Machine", NM->Machine); 2472bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapOptional("Characteristics", NC->Characteristics); 2482bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 2492bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2502bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid MappingTraits<COFFYAML::Symbol>::mapping(IO &IO, COFFYAML::Symbol &S) { 2512bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola MappingNormalization<NStorageClass, uint8_t> NS(IO, S.Header.StorageClass); 2522bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2532bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("Name", S.Name); 2542bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("Value", S.Header.Value); 2552bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("SectionNumber", S.Header.SectionNumber); 2562bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("SimpleType", S.SimpleType); 2572bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("ComplexType", S.ComplexType); 2582bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("StorageClass", NS->StorageClass); 25923a22cdedda691b5ed39f75bc1a846fd890f07fbRafael Espindola IO.mapOptional("NumberOfAuxSymbols", S.Header.NumberOfAuxSymbols, 26023a22cdedda691b5ed39f75bc1a846fd890f07fbRafael Espindola (uint8_t) 0); 26123a22cdedda691b5ed39f75bc1a846fd890f07fbRafael Espindola IO.mapOptional("AuxiliaryData", S.AuxiliaryData, object::yaml::BinaryRef()); 2622bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 2632bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2642bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid MappingTraits<COFFYAML::Section>::mapping(IO &IO, COFFYAML::Section &Sec) { 2652bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola MappingNormalization<NSectionCharacteristics, uint32_t> NC( 2662bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO, Sec.Header.Characteristics); 2672bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("Name", Sec.Name); 2682bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("Characteristics", NC->Characteristics); 2692bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapOptional("Alignment", Sec.Alignment); 2702bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("SectionData", Sec.SectionData); 2712bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapOptional("Relocations", Sec.Relocations); 2722bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 2732bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2742bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindolavoid MappingTraits<COFFYAML::Object>::mapping(IO &IO, COFFYAML::Object &Obj) { 2752bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("header", Obj.Header); 2762bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("sections", Obj.Sections); 2772bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola IO.mapRequired("symbols", Obj.Symbols); 2782bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 2792bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola 2802bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 2812bbe3781471936fa0c37ad738fa86b72997c6831Rafael Espindola} 282