# 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:
# 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:
# 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:
# 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
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
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
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)
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.
# 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
# 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:
//===----------------------------------------------------------------------===//
#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();
#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"
template <typename ObjectFileType> const ObjectFileType &GetAs() {
return cast<ObjectFileType>(*CurrentObjectFile);
}
+
+ static Triple getTriple(const object::MachOObjectFile &Obj);
};
}
}
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.
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();