summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Riss <friss@apple.com>2015-01-19 23:33:14 +0000
committerFrederic Riss <friss@apple.com>2015-01-19 23:33:14 +0000
commite4a6fef98ffd066db6360c53986032bcbd338275 (patch)
treec35204b154bbcf6b0e748c8fed4a866029827c75
parent13890af51cf1de674b2a8bccce2a2cb870617a21 (diff)
downloadbcm5719-llvm-e4a6fef98ffd066db6360c53986032bcbd338275.tar.gz
bcm5719-llvm-e4a6fef98ffd066db6360c53986032bcbd338275.zip
[dsymutil] Add the detected target triple to the debug map.
It will be needed to instantiate the Target object that we will use to create all the MC objects for the dwarf emission. llvm-svn: 226525
-rw-r--r--llvm/test/tools/dsymutil/debug-map-parsing.test8
-rw-r--r--llvm/tools/dsymutil/DebugMap.cpp3
-rw-r--r--llvm/tools/dsymutil/DebugMap.h6
-rw-r--r--llvm/tools/dsymutil/MachODebugMapParser.cpp9
4 files changed, 21 insertions, 5 deletions
diff --git a/llvm/test/tools/dsymutil/debug-map-parsing.test b/llvm/test/tools/dsymutil/debug-map-parsing.test
index f1b310f9b71..b64ad9ff2e4 100644
--- a/llvm/test/tools/dsymutil/debug-map-parsing.test
+++ b/llvm/test/tools/dsymutil/debug-map-parsing.test
@@ -8,7 +8,7 @@ RUN: not llvm-dsymutil -v -parse-only %p/Inputs/inexistant 2>&1 | FileCheck %s -
Check that We can parse the debug map of the basic executable.
CHECK-NOT: error
-CHECK: DEBUG MAP:
+CHECK: DEBUG MAP: x86_64-unknown-unknown-macho
CHECK: /Inputs/basic1.macho.x86_64.o:
CHECK: 0000000000000000 => 0000000100000ea0 _main
CHECK: /Inputs/basic2.macho.x86_64.o:
@@ -26,7 +26,7 @@ CHECK: END DEBUG MAP
Check that we can parse the debug-map of the basic-lto executable
CHECK-LTO-NOT: error
-CHECK-LTO: DEBUG MAP:
+CHECK-LTO: DEBUG MAP: x86_64-unknown-unknown-macho
CHECK-LTO: /Inputs/basic-lto.macho.x86_64.o:
CHECK-LTO: 0000000000000050 => 0000000100000f90 _bar
CHECK-LTO: 0000000000000658 => 0000000100001000 _baz
@@ -48,7 +48,8 @@ CHECK-ARCHIVE-NEXT: opened new archive {{.*}}/libbasic.a'
CHECK-ARCHIVE-NEXT: found member in current archive.
CHECK-ARCHIVE-NEXT: trying to open {{.*}}/libbasic.a(basic3.macho.x86_64.o)'
CHECK-ARCHIVE-NEXT: found member in current archive.
-CHECK-ARCHIVE: DEBUG MAP: object addr => executable addr symbol name
+CHECK-ARCHIVE: DEBUG MAP: x86_64-unknown-unknown-macho
+CHECK-ARCHIVE: object addr => executable addr symbol name
CHECK-ARCHIVE: /Inputs/basic1.macho.x86_64.o:
CHECK-ARCHIVE: 0000000000000000 => 0000000100000ea0 _main
CHECK-ARCHIVE: /Inputs/./libbasic.a(basic2.macho.x86_64.o):
@@ -69,6 +70,7 @@ NOT-FOUND: cannot open{{.*}}"/Inputs/basic1.macho.x86_64.o": {{[Nn]o}} such file
NOT-FOUND: cannot open{{.*}}"/Inputs/basic2.macho.x86_64.o": {{[Nn]o}} such file
NOT-FOUND: cannot open{{.*}}"/Inputs/basic3.macho.x86_64.o": {{[Nn]o}} such file
NOT-FOUND: DEBUG MAP:
+NOT-FOUND-NEXT: object addr => executable addr symbol name
NOT-FOUND-NEXT: END DEBUG MAP
Check that we correctly error out on invalid executatble.
diff --git a/llvm/tools/dsymutil/DebugMap.cpp b/llvm/tools/dsymutil/DebugMap.cpp
index 7898160ae6b..ca7ae80ee8f 100644
--- a/llvm/tools/dsymutil/DebugMap.cpp
+++ b/llvm/tools/dsymutil/DebugMap.cpp
@@ -67,7 +67,8 @@ DebugMapObject::lookupSymbol(StringRef SymbolName) const {
}
void DebugMap::print(raw_ostream &OS) const {
- OS << "DEBUG MAP: object addr => executable addr\tsymbol name\n";
+ OS << "DEBUG MAP: " << BinaryTriple.getTriple()
+ << "\n\tobject addr => executable addr\tsymbol name\n";
for (const auto &Obj : objects())
Obj->print(OS);
OS << "END DEBUG MAP\n";
diff --git a/llvm/tools/dsymutil/DebugMap.h b/llvm/tools/dsymutil/DebugMap.h
index 54bff327208..bafc1678b11 100644
--- a/llvm/tools/dsymutil/DebugMap.h
+++ b/llvm/tools/dsymutil/DebugMap.h
@@ -22,6 +22,7 @@
#define LLVM_TOOLS_DSYMUTIL_DEBUGMAP_H
#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/Triple.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Support/ErrorOr.h"
@@ -60,10 +61,13 @@ class DebugMapObject;
/// }
/// }
class DebugMap {
+ Triple BinaryTriple;
typedef std::vector<std::unique_ptr<DebugMapObject>> ObjectContainer;
ObjectContainer Objects;
public:
+ DebugMap(const Triple &BinaryTriple) : BinaryTriple(BinaryTriple) {}
+
typedef ObjectContainer::const_iterator const_iterator;
iterator_range<const_iterator> objects() const {
@@ -78,6 +82,8 @@ public:
/// debug map.
DebugMapObject &addDebugMapObject(StringRef ObjectFilePath);
+ const Triple &getTriple() { return BinaryTriple; }
+
void print(raw_ostream &OS) const;
#ifndef NDEBUG
diff --git a/llvm/tools/dsymutil/MachODebugMapParser.cpp b/llvm/tools/dsymutil/MachODebugMapParser.cpp
index 6b244fc369e..7bb0011fbfd 100644
--- a/llvm/tools/dsymutil/MachODebugMapParser.cpp
+++ b/llvm/tools/dsymutil/MachODebugMapParser.cpp
@@ -97,6 +97,13 @@ void MachODebugMapParser::switchToNewDebugMapObject(StringRef Filename) {
CurrentDebugMapObject = &Result->addDebugMapObject(Path);
}
+static Triple getTriple(const object::MachOObjectFile &Obj) {
+ Triple TheTriple("unknown-unknown-unknown");
+ TheTriple.setArch(Triple::ArchType(Obj.getArch()));
+ TheTriple.setObjectFormat(Triple::MachO);
+ return TheTriple;
+}
+
/// This main parsing routine tries to open the main binary and if
/// successful iterates over the STAB entries. The real parsing is
/// done in handleStabSymbolTableEntry.
@@ -107,7 +114,7 @@ ErrorOr<std::unique_ptr<DebugMap>> MachODebugMapParser::parse() {
const MachOObjectFile &MainBinary = *MainBinOrError;
loadMainBinarySymbols();
- Result = make_unique<DebugMap>();
+ Result = make_unique<DebugMap>(getTriple(MainBinary));
MainBinaryStrings = MainBinary.getStringTableData();
for (const SymbolRef &Symbol : MainBinary.symbols()) {
const DataRefImpl &DRI = Symbol.getRawDataRefImpl();
OpenPOWER on IntegriCloud