diff options
author | Frederic Riss <friss@apple.com> | 2015-07-24 06:41:04 +0000 |
---|---|---|
committer | Frederic Riss <friss@apple.com> | 2015-07-24 06:41:04 +0000 |
commit | 65f0abf275ccc1eb249bb12ce4ac826c9df37986 (patch) | |
tree | c3154244cd9f5c78e6447fe7f14dcd45e3a2f039 | |
parent | 9388406c2131a7e3c1e26524ba62d4f9e000168d (diff) | |
download | bcm5719-llvm-65f0abf275ccc1eb249bb12ce4ac826c9df37986.tar.gz bcm5719-llvm-65f0abf275ccc1eb249bb12ce4ac826c9df37986.zip |
[dsymutil] Make the triple detection more strict.
MachOObjectFile offers a method for detecting the correct triple, use
it instead of the previous approximation. This doesn't matter right
now, but it will become important for mach-o universal (fat) binaries.
llvm-svn: 243095
-rw-r--r-- | llvm/test/tools/dsymutil/X86/frame-1.test | 2 | ||||
-rw-r--r-- | llvm/test/tools/dsymutil/X86/frame-2.test | 2 | ||||
-rw-r--r-- | llvm/test/tools/dsymutil/X86/odr-1.test | 2 | ||||
-rw-r--r-- | llvm/test/tools/dsymutil/archive-timestamp.test | 2 | ||||
-rw-r--r-- | llvm/test/tools/dsymutil/debug-map-parsing.test | 8 | ||||
-rw-r--r-- | llvm/test/tools/dsymutil/yaml-object-address-rewrite.test | 4 | ||||
-rw-r--r-- | llvm/tools/dsymutil/BinaryHolder.cpp | 10 | ||||
-rw-r--r-- | llvm/tools/dsymutil/BinaryHolder.h | 3 | ||||
-rw-r--r-- | llvm/tools/dsymutil/MachODebugMapParser.cpp | 9 |
9 files changed, 24 insertions, 18 deletions
diff --git a/llvm/test/tools/dsymutil/X86/frame-1.test b/llvm/test/tools/dsymutil/X86/frame-1.test index 7852e68a142..fed18122d00 100644 --- a/llvm/test/tools/dsymutil/X86/frame-1.test +++ b/llvm/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/llvm/test/tools/dsymutil/X86/frame-2.test b/llvm/test/tools/dsymutil/X86/frame-2.test index 168e342a4f7..92520290dad 100644 --- a/llvm/test/tools/dsymutil/X86/frame-2.test +++ b/llvm/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/llvm/test/tools/dsymutil/X86/odr-1.test b/llvm/test/tools/dsymutil/X86/odr-1.test index b650dc098bf..607cd054b19 100644 --- a/llvm/test/tools/dsymutil/X86/odr-1.test +++ b/llvm/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/llvm/test/tools/dsymutil/archive-timestamp.test b/llvm/test/tools/dsymutil/archive-timestamp.test index 11add6d0b72..1daff8fcf63 100644 --- a/llvm/test/tools/dsymutil/archive-timestamp.test +++ b/llvm/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/llvm/test/tools/dsymutil/debug-map-parsing.test b/llvm/test/tools/dsymutil/debug-map-parsing.test index 5091dfbfc24..d8763e3b292 100644 --- a/llvm/test/tools/dsymutil/debug-map-parsing.test +++ b/llvm/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/llvm/test/tools/dsymutil/yaml-object-address-rewrite.test b/llvm/test/tools/dsymutil/yaml-object-address-rewrite.test index 73697d4a6e5..f553745d64e 100644 --- a/llvm/test/tools/dsymutil/yaml-object-address-rewrite.test +++ b/llvm/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/llvm/tools/dsymutil/BinaryHolder.cpp b/llvm/tools/dsymutil/BinaryHolder.cpp index 1774cf21e71..3f0c9b11260 100644 --- a/llvm/tools/dsymutil/BinaryHolder.cpp +++ b/llvm/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<MemoryBuffer> &&Buf) { CurrentArchive.reset(); diff --git a/llvm/tools/dsymutil/BinaryHolder.h b/llvm/tools/dsymutil/BinaryHolder.h index c072acac2b2..e4558580f9a 100644 --- a/llvm/tools/dsymutil/BinaryHolder.h +++ b/llvm/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 <typename ObjectFileType> const ObjectFileType &GetAs() { return cast<ObjectFileType>(*CurrentObjectFile); } + + static Triple getTriple(const object::MachOObjectFile &Obj); }; } } diff --git a/llvm/tools/dsymutil/MachODebugMapParser.cpp b/llvm/tools/dsymutil/MachODebugMapParser.cpp index 8f3ca6ca004..cda43494b9b 100644 --- a/llvm/tools/dsymutil/MachODebugMapParser.cpp +++ b/llvm/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<std::unique_ptr<DebugMap>> MachODebugMapParser::parse() { const MachOObjectFile &MainBinary = *MainBinOrError; loadMainBinarySymbols(); - Result = make_unique<DebugMap>(getTriple(MainBinary)); + Result = make_unique<DebugMap>(BinaryHolder::getTriple(MainBinary)); MainBinaryStrings = MainBinary.getStringTableData(); for (const SymbolRef &Symbol : MainBinary.symbols()) { const DataRefImpl &DRI = Symbol.getRawDataRefImpl(); |