summaryrefslogtreecommitdiffstats
path: root/llvm/tools/dsymutil/DebugMap.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/dsymutil/DebugMap.h')
-rw-r--r--llvm/tools/dsymutil/DebugMap.h50
1 files changed, 19 insertions, 31 deletions
diff --git a/llvm/tools/dsymutil/DebugMap.h b/llvm/tools/dsymutil/DebugMap.h
index c2917db981e..8d76f113e91 100644
--- a/llvm/tools/dsymutil/DebugMap.h
+++ b/llvm/tools/dsymutil/DebugMap.h
@@ -69,7 +69,6 @@ class DebugMap {
/// For YAML IO support.
///@{
- friend yaml::MappingTraits<std::unique_ptr<DebugMap>>;
friend yaml::MappingTraits<DebugMap>;
DebugMap() = default;
///@}
@@ -185,35 +184,33 @@ struct MappingTraits<std::pair<std::string, DebugMapObject::SymbolMapping>> {
};
template <> struct MappingTraits<dsymutil::DebugMapObject> {
- // Normalize/Denormalize between YAML and a DebugMapObject.
- struct YamlDMO {
- YamlDMO(IO &io) {}
-
- YamlDMO(IO &io, dsymutil::DebugMapObject &Obj) {
- Filename = Obj.Filename;
- Entries.reserve(Obj.Symbols.size());
- for (auto &Entry : Obj.Symbols)
+ typedef StringMap<dsymutil::DebugMapObject::SymbolMapping> SymbolMap;
+
+ struct SequencedStringMap {
+ SequencedStringMap(IO &io) {}
+
+ SequencedStringMap(IO &io, SymbolMap &Map) {
+ Entries.reserve(Map.size());
+ for (auto &Entry : Map)
Entries.push_back(std::make_pair(Entry.getKey(), Entry.getValue()));
}
- dsymutil::DebugMapObject denormalize(IO &) {
- dsymutil::DebugMapObject Res(Filename);
- for (auto &Entry : Entries) {
- auto &Mapping = Entry.second;
- Res.addSymbol(Entry.first, Mapping.ObjectAddress, Mapping.BinaryAddress,
- Mapping.Size);
- }
+ SymbolMap denormalize(IO &) {
+ SymbolMap Res;
+
+ for (auto &Entry : Entries)
+ Res[Entry.first] = Entry.second;
+
return Res;
}
- std::string Filename;
std::vector<dsymutil::DebugMapObject::YAMLSymbolMapping> Entries;
};
- static void mapping(IO &io, dsymutil::DebugMapObject &DMO) {
- MappingNormalization<YamlDMO, dsymutil::DebugMapObject> Norm(io, DMO);
- io.mapRequired("filename", Norm->Filename);
- io.mapRequired("symbols", Norm->Entries);
+ static void mapping(IO &io, dsymutil::DebugMapObject &s) {
+ MappingNormalization<SequencedStringMap, SymbolMap> seq(io, s.Symbols);
+ io.mapRequired("filename", s.Filename);
+ io.mapRequired("symbols", seq->Entries);
}
};
@@ -225,7 +222,7 @@ template <> struct ScalarTraits<Triple> {
static StringRef input(StringRef scalar, void *, Triple &value) {
value = Triple(scalar);
- return StringRef();
+ return value.str();
}
static bool mustQuote(StringRef) { return true; }
@@ -256,15 +253,6 @@ template <> struct MappingTraits<dsymutil::DebugMap> {
io.mapOptional("objects", DM.Objects);
}
};
-
- template <> struct MappingTraits<std::unique_ptr<dsymutil::DebugMap>> {
- static void mapping(IO &io, std::unique_ptr<dsymutil::DebugMap> &DM) {
- if (!DM)
- DM.reset(new DebugMap());
- io.mapRequired("triple", DM->BinaryTriple);
- io.mapOptional("objects", DM->Objects);
- }
-};
}
}
OpenPOWER on IntegriCloud