diff --git a/test/tools/dsymutil/X86/frame-1.test b/test/tools/dsymutil/X86/frame-1.test index 7852e68a142..fed18122d00 100644 --- a/test/tools/dsymutil/X86/frame-1.test +++ b/test/tools/dsymutil/X86/frame-1.test @@ -9,7 +9,7 @@ # link twice the same file using this made-up debug map: --- -triple: 'i386-unknown-unknown-macho' +triple: 'i386-apple-darwin' objects: - filename: frame-dw2.o symbols: diff --git a/test/tools/dsymutil/X86/frame-2.test b/test/tools/dsymutil/X86/frame-2.test index 168e342a4f7..92520290dad 100644 --- a/test/tools/dsymutil/X86/frame-2.test +++ b/test/tools/dsymutil/X86/frame-2.test @@ -12,7 +12,7 @@ # appears again. This is a behavior we inherited from dsymutil-classic # but this should be fixed (see comment in patchFrameInfoForObject()) --- -triple: 'i386-unknown-unknown-macho' +triple: 'i386-apple-darwin' objects: - filename: frame-dw2.o symbols: diff --git a/test/tools/dsymutil/X86/odr-1.test b/test/tools/dsymutil/X86/odr-1.test index b650dc098bf..607cd054b19 100644 --- a/test/tools/dsymutil/X86/odr-1.test +++ b/test/tools/dsymutil/X86/odr-1.test @@ -14,7 +14,7 @@ # Totally made up debug map to test ODR uniquing --- -triple: 'x86_64-unknown-unknown-macho' +triple: 'x86_64-apple-darwin' objects: - filename: odr1.o symbols: diff --git a/test/tools/dsymutil/archive-timestamp.test b/test/tools/dsymutil/archive-timestamp.test index 11add6d0b72..1daff8fcf63 100644 --- a/test/tools/dsymutil/archive-timestamp.test +++ b/test/tools/dsymutil/archive-timestamp.test @@ -6,7 +6,7 @@ # CHECK: warning: {{.*}}libbasic.a(basic3.macho.x86_64.o): {{[Nn]o}} such file --- -triple: 'x86_64-unknown-unknown-macho' +triple: 'x86_64-apple-darwin' objects: - filename: '/Inputs/libbasic.a(basic2.macho.x86_64.o)' timestamp: 141869239 diff --git a/test/tools/dsymutil/debug-map-parsing.test b/test/tools/dsymutil/debug-map-parsing.test index 5091dfbfc24..d8763e3b292 100644 --- a/test/tools/dsymutil/debug-map-parsing.test +++ b/test/tools/dsymutil/debug-map-parsing.test @@ -9,7 +9,7 @@ Check that We can parse the debug map of the basic executable. CHECK-NOT: error CHECK: --- -CHECK: triple: 'x86_64-unknown-unknown-macho' +CHECK: triple: 'x86_64-apple-darwin' CHECK: filename:{{.*}}/Inputs/basic1.macho.x86_64.o CHECK-DAG: sym: _main, objAddr: 0x0000000000000000, binAddr: 0x0000000100000EA0, size: 0x00000024 CHECK: filename{{.*}}/Inputs/basic2.macho.x86_64.o @@ -28,7 +28,7 @@ Check that we can parse the debug-map of the basic-lto executable CHECK-LTO-NOT: error CHECK-LTO: --- -CHECK-LTO: triple: 'x86_64-unknown-unknown-macho' +CHECK-LTO: triple: 'x86_64-apple-darwin' CHECK-LTO: /Inputs/basic-lto.macho.x86_64.o CHECK-LTO-DAG: sym: _bar, objAddr: 0x0000000000000050, binAddr: 0x0000000100000F90, size: 0x00000024 CHECK-LTO-DAG: sym: _baz, objAddr: 0x0000000000000658, binAddr: 0x0000000100001000, size: 0x00000000 @@ -51,7 +51,7 @@ 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: --- -CHECK-ARCHIVE: triple: 'x86_64-unknown-unknown-macho' +CHECK-ARCHIVE: triple: 'x86_64-apple-darwin' CHECK-ARCHIVE: /Inputs/basic1.macho.x86_64.o CHECK-ARCHIVE-DAG: sym: _main, objAddr: 0x0000000000000000, binAddr: 0x0000000100000EA0, size: 0x00000024 CHECK-ARCHIVE: /Inputs/./libbasic.a(basic2.macho.x86_64.o) @@ -72,7 +72,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: --- -NOT-FOUND-NEXT: triple: 'x86_64-unknown-unknown-macho' +NOT-FOUND-NEXT: triple: 'x86_64-apple-darwin' NOT-FOUND-NEXT: ... Check that we correctly error out on invalid executatble. diff --git a/test/tools/dsymutil/yaml-object-address-rewrite.test b/test/tools/dsymutil/yaml-object-address-rewrite.test index 73697d4a6e5..f553745d64e 100644 --- a/test/tools/dsymutil/yaml-object-address-rewrite.test +++ b/test/tools/dsymutil/yaml-object-address-rewrite.test @@ -5,7 +5,7 @@ # rewrite these addresses to the right values. # # CHECK: --- -# CHECK-NEXT: triple:{{.*}}'x86_64-unknown-unknown-macho' +# CHECK-NEXT: triple:{{.*}}'x86_64-apple-darwin' # CHECK-NEXT: objects: # CHECK-NEXT: filename:{{.*}}/Inputs/basic1.macho.x86_64.o # CHECK-NEXT: timestamp: 0 @@ -28,7 +28,7 @@ # CHECK-NOT: { sym: # CHECK-NEXT: ... --- -triple: 'x86_64-unknown-unknown-macho' +triple: 'x86_64-apple-darwin' objects: - filename: /Inputs/basic1.macho.x86_64.o symbols: diff --git a/tools/dsymutil/BinaryHolder.cpp b/tools/dsymutil/BinaryHolder.cpp index 1774cf21e71..3f0c9b11260 100644 --- a/tools/dsymutil/BinaryHolder.cpp +++ b/tools/dsymutil/BinaryHolder.cpp @@ -13,11 +13,21 @@ //===----------------------------------------------------------------------===// #include "BinaryHolder.h" +#include "llvm/Object/MachO.h" #include "llvm/Support/raw_ostream.h" namespace llvm { namespace dsymutil { +Triple BinaryHolder::getTriple(const object::MachOObjectFile &Obj) { + // If a ThumbTriple is returned, use it instead of the standard + // one. This is because the thumb triple always allows to create a + // target, whereas the non-thumb one might not. + Triple ThumbTriple; + Triple T = Obj.getArch(nullptr, &ThumbTriple); + return ThumbTriple.getArch() ? ThumbTriple : T; +} + void BinaryHolder::changeBackingMemoryBuffer( std::unique_ptr &&Buf) { CurrentArchive.reset(); diff --git a/tools/dsymutil/BinaryHolder.h b/tools/dsymutil/BinaryHolder.h index c072acac2b2..e4558580f9a 100644 --- a/tools/dsymutil/BinaryHolder.h +++ b/tools/dsymutil/BinaryHolder.h @@ -14,6 +14,7 @@ #ifndef LLVM_TOOLS_DSYMUTIL_BINARYHOLDER_H #define LLVM_TOOLS_DSYMUTIL_BINARYHOLDER_H +#include "llvm/ADT/Triple.h" #include "llvm/Object/Archive.h" #include "llvm/Object/Error.h" #include "llvm/Object/ObjectFile.h" @@ -108,6 +109,8 @@ public: template const ObjectFileType &GetAs() { return cast(*CurrentObjectFile); } + + static Triple getTriple(const object::MachOObjectFile &Obj); }; } } diff --git a/tools/dsymutil/MachODebugMapParser.cpp b/tools/dsymutil/MachODebugMapParser.cpp index 8f3ca6ca004..cda43494b9b 100644 --- a/tools/dsymutil/MachODebugMapParser.cpp +++ b/tools/dsymutil/MachODebugMapParser.cpp @@ -103,13 +103,6 @@ void MachODebugMapParser::switchToNewDebugMapObject(StringRef Filename, CurrentDebugMapObject = &Result->addDebugMapObject(Path, Timestamp); } -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. @@ -120,7 +113,7 @@ ErrorOr> MachODebugMapParser::parse() { const MachOObjectFile &MainBinary = *MainBinOrError; loadMainBinarySymbols(); - Result = make_unique(getTriple(MainBinary)); + Result = make_unique(BinaryHolder::getTriple(MainBinary)); MainBinaryStrings = MainBinary.getStringTableData(); for (const SymbolRef &Symbol : MainBinary.symbols()) { const DataRefImpl &DRI = Symbol.getRawDataRefImpl();