//===----------------------------------------------------------------------===//
#include "DebugMap.h"
+#include "llvm/ADT/iterator_range.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/DataTypes.h"
#include "llvm/Support/Format.h"
#include <algorithm>
namespace llvm {
+namespace dsymutil {
using namespace llvm::object;
DebugMapObject::DebugMapObject(StringRef ObjectFilename)
- : Filename(ObjectFilename) {}
+ : Filename(ObjectFilename) {}
bool DebugMapObject::addSymbol(StringRef Name, uint64_t ObjectAddress,
uint64_t LinkedAddress) {
- auto InsertResult = Symbols.insert(std::make_pair(Name,
- SymbolMapping{ObjectAddress,
- LinkedAddress}));
+ auto InsertResult = Symbols.insert(
+ std::make_pair(Name, SymbolMapping(ObjectAddress, LinkedAddress)));
return InsertResult.second;
}
-void DebugMapObject::print(raw_ostream& OS) const {
+void DebugMapObject::print(raw_ostream &OS) const {
OS << getObjectFilename() << ":\n";
// Sort the symbols in alphabetical order, like llvm-nm (and to get
// deterministic output for testing).
- typedef StringMapEntry<SymbolMapping> MapEntryTy;
- std::vector<const MapEntryTy *> Entries;
+ typedef std::pair<StringRef, SymbolMapping> Entry;
+ std::vector<Entry> Entries;
Entries.reserve(Symbols.getNumItems());
- for (auto SymIt = Symbols.begin(), End = Symbols.end(); SymIt != End; ++SymIt)
- Entries.push_back(&*SymIt);
- std::sort(Entries.begin(), Entries.end(),
- [] (const MapEntryTy *LHS, const MapEntryTy *RHS) {
- return LHS->getKey() < RHS->getKey();
- });
- for (const auto *Entry: Entries) {
- const auto &Sym = Entry->getValue();
+ for (const auto &Sym : make_range(Symbols.begin(), Symbols.end()))
+ Entries.push_back(std::make_pair(Sym.getKey(), Sym.getValue()));
+ std::sort(
+ Entries.begin(), Entries.end(),
+ [](const Entry &LHS, const Entry &RHS) { return LHS.first < RHS.first; });
+ for (const auto &Sym : Entries) {
OS << format("\t%016" PRIx64 " => %016" PRIx64 "\t%s\n",
- Sym.ObjectAddress, Sym.BinaryAddress, Entry->getKeyData());
+ Sym.second.ObjectAddress, Sym.second.BinaryAddress,
+ Sym.first.data());
}
OS << '\n';
}
#ifndef NDEBUG
-void DebugMapObject::dump() const {
- print(errs());
-}
+void DebugMapObject::dump() const { print(errs()); }
#endif
-DebugMapObject& DebugMap::addDebugMapObject(StringRef ObjectFilePath) {
+DebugMapObject &DebugMap::addDebugMapObject(StringRef ObjectFilePath) {
Objects.emplace_back(new DebugMapObject(ObjectFilePath));
return *Objects.back();
}
return &Sym->getValue();
}
-void DebugMap::print(raw_ostream& OS) const {
+void DebugMap::print(raw_ostream &OS) const {
OS << "DEBUG MAP: object addr => executable addr\tsymbol name\n";
- for (const auto &Obj: objects())
+ for (const auto &Obj : objects())
Obj->print(OS);
OS << "END DEBUG MAP\n";
}
#ifndef NDEBUG
-void DebugMap::dump() const {
- print(errs());
-}
+void DebugMap::dump() const { print(errs()); }
#endif
}
+}