diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-20 02:02:25 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-20 02:02:25 +0000 |
commit | f59a2a86fffa55d5a4f6a2bc339bfa55f4ccf059 (patch) | |
tree | 82ac8bd37adbcedf24361b759a21af1eb4ec16b4 /tools | |
parent | 69394f2997561788c3b2e4688ac0fcc99d259256 (diff) | |
download | external_llvm-f59a2a86fffa55d5a4f6a2bc339bfa55f4ccf059.zip external_llvm-f59a2a86fffa55d5a4f6a2bc339bfa55f4ccf059.tar.gz external_llvm-f59a2a86fffa55d5a4f6a2bc339bfa55f4ccf059.tar.bz2 |
Remove COFFYAML::Header.
Instead, use MappingNormalization to directly parse COFF::header. Also change
the naming convention of the helper classes to be a bit shorter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179917 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/yaml2obj/yaml2obj.cpp | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/tools/yaml2obj/yaml2obj.cpp b/tools/yaml2obj/yaml2obj.cpp index 6748802..5741d95 100644 --- a/tools/yaml2obj/yaml2obj.cpp +++ b/tools/yaml2obj/yaml2obj.cpp @@ -121,11 +121,6 @@ namespace COFFYAML { StringRef Name; }; - struct Header { - COFF::MachineTypes Machine; - COFF::Characteristics Characteristics; - }; - struct Symbol { COFF::SymbolBaseType SimpleType; uint8_t NumberOfAuxSymbols; @@ -138,7 +133,7 @@ namespace COFFYAML { }; struct Object { - Header HeaderData; + COFF::header HeaderData; std::vector<Section> Sections; std::vector<Symbol> Symbols; }; @@ -632,31 +627,57 @@ struct MappingTraits<COFFYAML::Symbol> { }; template <> -struct MappingTraits<COFFYAML::Header> { - static void mapping(IO &IO, COFFYAML::Header &H) { - IO.mapRequired("Machine", H.Machine); - IO.mapOptional("Characteristics", H.Characteristics); +struct MappingTraits<COFF::header> { + struct NMachine { + NMachine(IO&) : Machine(COFF::MachineTypes(0)) { + } + NMachine(IO&, uint16_t M) : Machine(COFF::MachineTypes(M)) { + } + uint16_t denormalize(IO &) { + return Machine; + } + COFF::MachineTypes Machine; + }; + + struct NCharacteristics { + NCharacteristics(IO&) : Characteristics(COFF::Characteristics(0)) { + } + NCharacteristics(IO&, uint16_t C) : + Characteristics(COFF::Characteristics(C)) { + } + uint16_t denormalize(IO &) { + return Characteristics; + } + + COFF::Characteristics Characteristics; + }; + + static void mapping(IO &IO, COFF::header &H) { + MappingNormalization<NMachine, uint16_t> NM(IO, H.Machine); + MappingNormalization<NCharacteristics, uint16_t> NC(IO, H.Characteristics); + + IO.mapRequired("Machine", NM->Machine); + IO.mapOptional("Characteristics", NC->Characteristics); } }; template <> struct MappingTraits<COFF::relocation> { - struct NormalizedType { - public: - NormalizedType(IO &) : Type(COFF::RelocationTypeX86(0)) { + struct NType { + NType(IO &) : Type(COFF::RelocationTypeX86(0)) { } - NormalizedType(IO &, uint16_t T) : Type(COFF::RelocationTypeX86(T)) { + NType(IO &, uint16_t T) : Type(COFF::RelocationTypeX86(T)) { } uint16_t denormalize(IO &) { return Type; } - COFF::RelocationTypeX86 Type; }; + static void mapping(IO &IO, COFF::relocation &Rel) { - MappingNormalization<NormalizedType, uint16_t> foo(IO, Rel.Type); + MappingNormalization<NType, uint16_t> NT(IO, Rel.Type); - IO.mapRequired("Type", foo->Type); + IO.mapRequired("Type", NT->Type); IO.mapRequired("VirtualAddress", Rel.VirtualAddress); IO.mapRequired("SymbolTableIndex", Rel.SymbolTableIndex); } |