[dsymutil] Add the detected target triple to the debug map.
authorFrederic Riss <friss@apple.com>
Mon, 19 Jan 2015 23:33:14 +0000 (23:33 +0000)
committerFrederic Riss <friss@apple.com>
Mon, 19 Jan 2015 23:33:14 +0000 (23:33 +0000)
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

test/tools/dsymutil/debug-map-parsing.test
tools/dsymutil/DebugMap.cpp
tools/dsymutil/DebugMap.h
tools/dsymutil/MachODebugMapParser.cpp

index f1b310f9b714b9b7cc9bf4d775bb8b7097267436..b64ad9ff2e4d122814fa8638761a12e6eb3fba82 100644 (file)
@@ -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.
index 7898160ae6b9e215a13935a87a951bcf84f7ef82..ca7ae80ee8f651654427e909c40ed3137c423732 100644 (file)
@@ -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";
index 54bff3272080829c3186bc1ff4427d0c313b0ecc..bafc1678b11ade79a33c590f1d8babc4b9bb743e 100644 (file)
@@ -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
index 6b244fc369e90e8bc2a7984b8a15b3ea418e481b..7bb0011fbfdb3d16731c0050a6c1df2f418e3e01 100644 (file)
@@ -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();