From: Frederic Riss Date: Mon, 19 Jan 2015 23:33:14 +0000 (+0000) Subject: [dsymutil] Add the detected target triple to the debug map. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=8732027cd8c6f3ef699e959eab61980f0ba34149;p=oota-llvm.git [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226525 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/dsymutil/debug-map-parsing.test b/test/tools/dsymutil/debug-map-parsing.test index f1b310f9b71..b64ad9ff2e4 100644 --- a/test/tools/dsymutil/debug-map-parsing.test +++ b/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/tools/dsymutil/DebugMap.cpp b/tools/dsymutil/DebugMap.cpp index 7898160ae6b..ca7ae80ee8f 100644 --- a/tools/dsymutil/DebugMap.cpp +++ b/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/tools/dsymutil/DebugMap.h b/tools/dsymutil/DebugMap.h index 54bff327208..bafc1678b11 100644 --- a/tools/dsymutil/DebugMap.h +++ b/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> ObjectContainer; ObjectContainer Objects; public: + DebugMap(const Triple &BinaryTriple) : BinaryTriple(BinaryTriple) {} + typedef ObjectContainer::const_iterator const_iterator; iterator_range 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/tools/dsymutil/MachODebugMapParser.cpp b/tools/dsymutil/MachODebugMapParser.cpp index 6b244fc369e..7bb0011fbfd 100644 --- a/tools/dsymutil/MachODebugMapParser.cpp +++ b/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> MachODebugMapParser::parse() { const MachOObjectFile &MainBinary = *MainBinOrError; loadMainBinarySymbols(); - Result = make_unique(); + Result = make_unique(getTriple(MainBinary)); MainBinaryStrings = MainBinary.getStringTableData(); for (const SymbolRef &Symbol : MainBinary.symbols()) { const DataRefImpl &DRI = Symbol.getRawDataRefImpl();