forked from OSchip/llvm-project
[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
This commit is contained in:
parent
9388406c21
commit
65f0abf275
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue