summaryrefslogtreecommitdiff
path: root/tools/yaml2obj
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-04-20 02:02:25 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-04-20 02:02:25 +0000
commitf59a2a86fffa55d5a4f6a2bc339bfa55f4ccf059 (patch)
tree82ac8bd37adbcedf24361b759a21af1eb4ec16b4 /tools/yaml2obj
parent69394f2997561788c3b2e4688ac0fcc99d259256 (diff)
downloadllvm-f59a2a86fffa55d5a4f6a2bc339bfa55f4ccf059.tar.gz
llvm-f59a2a86fffa55d5a4f6a2bc339bfa55f4ccf059.tar.bz2
llvm-f59a2a86fffa55d5a4f6a2bc339bfa55f4ccf059.tar.xz
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/yaml2obj')
-rw-r--r--tools/yaml2obj/yaml2obj.cpp55
1 files changed, 38 insertions, 17 deletions
diff --git a/tools/yaml2obj/yaml2obj.cpp b/tools/yaml2obj/yaml2obj.cpp
index 67488023d5..5741d95c54 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);
}