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