Skip to content

Commit 9e8eb41

Browse files
committed
MachO: remove weird ARM/Thumb interface from MachOObjectFile
Only one consumer (llvm-objdump) actually cared about the fact that there were two triples. Others were actively working around the fact that the Triple returned by getArch might have been invalid. As for llvm-objdump, it needs to be acutely aware of both Triples anyway, so being generic in the exposed API is no benefit. Also rename the version of getArch returning a Triple. Users were having to pass an unwanted nullptr to disambiguate the two, which was nasty. The only functional change here is that armv7m and armv7em object files no longer crash llvm-objdump. llvm-svn: 267249
1 parent cae0855 commit 9e8eb41

File tree

13 files changed

+47
-100
lines changed

13 files changed

+47
-100
lines changed

llvm/include/llvm/Object/MachO.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ class MachOObjectFile : public ObjectFile {
261261

262262
StringRef getFileFormatName() const override;
263263
unsigned getArch() const override;
264-
Triple getArch(const char **McpuDefault, Triple *ThumbTriple) const;
264+
Triple getArchTriple(const char **McpuDefault = nullptr) const;
265265

266266
relocation_iterator section_rel_begin(unsigned Index) const;
267267
relocation_iterator section_rel_end(unsigned Index) const;
@@ -407,12 +407,8 @@ class MachOObjectFile : public ObjectFile {
407407
StringRef &Suffix);
408408

409409
static Triple::ArchType getArch(uint32_t CPUType);
410-
static Triple getArch(uint32_t CPUType, uint32_t CPUSubType,
411-
const char **McpuDefault = nullptr);
412-
static Triple getThumbArch(uint32_t CPUType, uint32_t CPUSubType,
413-
const char **McpuDefault = nullptr);
414-
static Triple getArch(uint32_t CPUType, uint32_t CPUSubType,
415-
const char **McpuDefault, Triple *ThumbTriple);
410+
static Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
411+
const char **McpuDefault = nullptr);
416412
static bool isValidArch(StringRef ArchFlag);
417413
static Triple getHostArch();
418414

llvm/include/llvm/Object/MachOUniversal.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ class MachOUniversalBinary : public Binary {
5858
uint32_t getSize() const { return Header.size; }
5959
uint32_t getAlign() const { return Header.align; }
6060
std::string getArchTypeName() const {
61-
Triple T = MachOObjectFile::getArch(Header.cputype, Header.cpusubtype);
61+
Triple T =
62+
MachOObjectFile::getArchTriple(Header.cputype, Header.cpusubtype);
6263
return T.getArchName();
6364
}
6465

llvm/lib/Object/MachOObjectFile.cpp

Lines changed: 6 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,8 +1184,8 @@ Triple::ArchType MachOObjectFile::getArch(uint32_t CPUType) {
11841184
}
11851185
}
11861186

1187-
Triple MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType,
1188-
const char **McpuDefault) {
1187+
Triple MachOObjectFile::getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
1188+
const char **McpuDefault) {
11891189
if (McpuDefault)
11901190
*McpuDefault = nullptr;
11911191

@@ -1225,13 +1225,13 @@ Triple MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType,
12251225
case MachO::CPU_SUBTYPE_ARM_V7EM:
12261226
if (McpuDefault)
12271227
*McpuDefault = "cortex-m4";
1228-
return Triple("armv7em-apple-darwin");
1228+
return Triple("thumbv7em-apple-darwin");
12291229
case MachO::CPU_SUBTYPE_ARM_V7K:
12301230
return Triple("armv7k-apple-darwin");
12311231
case MachO::CPU_SUBTYPE_ARM_V7M:
12321232
if (McpuDefault)
12331233
*McpuDefault = "cortex-m3";
1234-
return Triple("armv7m-apple-darwin");
1234+
return Triple("thumbv7m-apple-darwin");
12351235
case MachO::CPU_SUBTYPE_ARM_V7S:
12361236
return Triple("armv7s-apple-darwin");
12371237
default:
@@ -1263,56 +1263,6 @@ Triple MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType,
12631263
}
12641264
}
12651265

1266-
Triple MachOObjectFile::getThumbArch(uint32_t CPUType, uint32_t CPUSubType,
1267-
const char **McpuDefault) {
1268-
if (McpuDefault)
1269-
*McpuDefault = nullptr;
1270-
1271-
switch (CPUType) {
1272-
case MachO::CPU_TYPE_ARM:
1273-
switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) {
1274-
case MachO::CPU_SUBTYPE_ARM_V4T:
1275-
return Triple("thumbv4t-apple-darwin");
1276-
case MachO::CPU_SUBTYPE_ARM_V5TEJ:
1277-
return Triple("thumbv5e-apple-darwin");
1278-
case MachO::CPU_SUBTYPE_ARM_XSCALE:
1279-
return Triple("xscale-apple-darwin");
1280-
case MachO::CPU_SUBTYPE_ARM_V6:
1281-
return Triple("thumbv6-apple-darwin");
1282-
case MachO::CPU_SUBTYPE_ARM_V6M:
1283-
if (McpuDefault)
1284-
*McpuDefault = "cortex-m0";
1285-
return Triple("thumbv6m-apple-darwin");
1286-
case MachO::CPU_SUBTYPE_ARM_V7:
1287-
return Triple("thumbv7-apple-darwin");
1288-
case MachO::CPU_SUBTYPE_ARM_V7EM:
1289-
if (McpuDefault)
1290-
*McpuDefault = "cortex-m4";
1291-
return Triple("thumbv7em-apple-darwin");
1292-
case MachO::CPU_SUBTYPE_ARM_V7K:
1293-
return Triple("thumbv7k-apple-darwin");
1294-
case MachO::CPU_SUBTYPE_ARM_V7M:
1295-
if (McpuDefault)
1296-
*McpuDefault = "cortex-m3";
1297-
return Triple("thumbv7m-apple-darwin");
1298-
case MachO::CPU_SUBTYPE_ARM_V7S:
1299-
return Triple("thumbv7s-apple-darwin");
1300-
default:
1301-
return Triple();
1302-
}
1303-
default:
1304-
return Triple();
1305-
}
1306-
}
1307-
1308-
Triple MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType,
1309-
const char **McpuDefault, Triple *ThumbTriple) {
1310-
Triple T = MachOObjectFile::getArch(CPUType, CPUSubType, McpuDefault);
1311-
*ThumbTriple = MachOObjectFile::getThumbArch(CPUType, CPUSubType,
1312-
McpuDefault);
1313-
return T;
1314-
}
1315-
13161266
Triple MachOObjectFile::getHostArch() {
13171267
return Triple(sys::getDefaultTargetTriple());
13181268
}
@@ -1342,10 +1292,8 @@ unsigned MachOObjectFile::getArch() const {
13421292
return getArch(getCPUType(this));
13431293
}
13441294

1345-
Triple MachOObjectFile::getArch(const char **McpuDefault,
1346-
Triple *ThumbTriple) const {
1347-
*ThumbTriple = getThumbArch(Header.cputype, Header.cpusubtype, McpuDefault);
1348-
return getArch(Header.cputype, Header.cpusubtype, McpuDefault);
1295+
Triple MachOObjectFile::getArchTriple(const char **McpuDefault) const {
1296+
return getArchTriple(Header.cputype, Header.cpusubtype, McpuDefault);
13491297
}
13501298

13511299
relocation_iterator MachOObjectFile::section_rel_begin(unsigned Index) const {

llvm/test/tools/dsymutil/ARM/dummy-debug-map.map

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# you can extend this file with as much object files and symbols as needed.
77

88
---
9-
triple: 'thumbv7-apple-darwin'
9+
triple: 'armv7-apple-darwin'
1010
objects:
1111
- filename: 1.o
1212
symbols:

llvm/test/tools/dsymutil/arch-option.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ RUN: not llvm-dsymutil -oso-prepend-path %p -dump-debug-map %p/Inputs/fat-test.a
1414

1515
ARMV7: ---
1616
ARMV7-NOT: ...
17-
ARMV7: triple: 'thumbv7-apple-darwin'
17+
ARMV7: triple: 'armv7-apple-darwin'
1818
ARMV7-NOT: ...
1919
ARMV7: sym: _armv7_var
2020
ARMV7-NOT: ---
2121

2222
ARMV7S: ---
2323
ARMV7S-NOT: ...
24-
ARMV7S: triple: 'thumbv7s-apple-darwin'
24+
ARMV7S: triple: 'armv7s-apple-darwin'
2525
ARMV7S-NOT: ...
2626
ARMV7S: sym: _armv7s_var
2727
ARMV7S-NOT: ---
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
@ RUN: llvm-mc < %s -triple thumbv7m-apple-macho -filetype=obj | llvm-objdump -macho -d - | FileCheck %s
2+
@ RUN: llvm-mc < %s -triple thumbv7em-apple-macho -filetype=obj | llvm-objdump -macho -d - | FileCheck %s
3+
4+
.thumb
5+
.thumb_func _t
6+
_t:
7+
@ A nice Cortex-M only instruction to make sure the default CPU is sound.
8+
msr msp, r0
9+
10+
@ CHECK: msr msp, r0

llvm/test/tools/llvm-symbolizer/fat.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=x86_64 | FileCheck --check-prefix=X86_64 %s
22
RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=x86_64h | FileCheck --check-prefix=X86_64H %s
33
RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=armv7 | FileCheck --check-prefix=ARMV7 %s
4-
RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=armv7em | FileCheck --check-prefix=ARMV7EM %s
5-
RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=armv7m | FileCheck --check-prefix=ARMV7M %s
4+
RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=thumbv7em | FileCheck --check-prefix=ARMV7EM %s
5+
RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=thumbv7m | FileCheck --check-prefix=ARMV7M %s
66

77
X86_64: x86_64_function
88
X86_64H: x86_64h_function

llvm/tools/dsymutil/BinaryHolder.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,6 @@
1919
namespace llvm {
2020
namespace dsymutil {
2121

22-
Triple BinaryHolder::getTriple(const object::MachOObjectFile &Obj) {
23-
// If a ThumbTriple is returned, use it instead of the standard
24-
// one. This is because the thumb triple always allows to create a
25-
// target, whereas the non-thumb one might not.
26-
Triple ThumbTriple;
27-
Triple T = Obj.getArch(nullptr, &ThumbTriple);
28-
return ThumbTriple.getArch() ? ThumbTriple : T;
29-
}
30-
3122
static std::vector<MemoryBufferRef>
3223
getMachOFatMemoryBuffers(StringRef Filename, MemoryBuffer &Mem,
3324
object::MachOUniversalBinary &Fat) {
@@ -175,7 +166,7 @@ ErrorOr<const object::ObjectFile &>
175166
BinaryHolder::getObjfileForArch(const Triple &T) {
176167
for (const auto &Obj : CurrentObjectFiles) {
177168
if (const auto *MachO = dyn_cast<object::MachOObjectFile>(Obj.get())) {
178-
if (getTriple(*MachO).str() == T.str())
169+
if (MachO->getArchTriple().str() == T.str())
179170
return *MachO;
180171
} else if (Obj->getArch() == T.getArch())
181172
return *Obj;

llvm/tools/dsymutil/BinaryHolder.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,6 @@ class BinaryHolder {
128128
return Err;
129129
return cast<ObjectFileType>(*ErrOrObj);
130130
}
131-
132-
static Triple getTriple(const object::MachOObjectFile &Obj);
133131
};
134132
}
135133
}

llvm/tools/dsymutil/MachODebugMapParser.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,17 +137,15 @@ void MachODebugMapParser::switchToNewDebugMapObject(StringRef Filename,
137137
}
138138

139139
static std::string getArchName(const object::MachOObjectFile &Obj) {
140-
Triple ThumbTriple;
141-
Triple T = Obj.getArch(nullptr, &ThumbTriple);
140+
Triple T = Obj.getArchTriple();
142141
return T.getArchName();
143142
}
144143

145144
std::unique_ptr<DebugMap>
146145
MachODebugMapParser::parseOneBinary(const MachOObjectFile &MainBinary,
147146
StringRef BinaryPath) {
148147
loadMainBinarySymbols(MainBinary);
149-
Result =
150-
make_unique<DebugMap>(BinaryHolder::getTriple(MainBinary), BinaryPath);
148+
Result = make_unique<DebugMap>(MainBinary.getArchTriple(), BinaryPath);
151149
MainBinaryStrings = MainBinary.getStringTableData();
152150
for (const SymbolRef &Symbol : MainBinary.symbols()) {
153151
const DataRefImpl &DRI = Symbol.getRawDataRefImpl();
@@ -308,9 +306,8 @@ bool MachODebugMapParser::dumpStab() {
308306
return false;
309307
}
310308

311-
Triple T;
312309
for (const auto *Binary : *MainBinOrError)
313-
if (shouldLinkArch(Archs, Binary->getArch(nullptr, &T).getArchName()))
310+
if (shouldLinkArch(Archs, Binary->getArchTriple().getArchName()))
314311
dumpOneBinaryStab(*Binary, BinaryPath);
315312

316313
return true;
@@ -326,9 +323,8 @@ ErrorOr<std::vector<std::unique_ptr<DebugMap>>> MachODebugMapParser::parse() {
326323
return Error;
327324

328325
std::vector<std::unique_ptr<DebugMap>> Results;
329-
Triple T;
330326
for (const auto *Binary : *MainBinOrError)
331-
if (shouldLinkArch(Archs, Binary->getArch(nullptr, &T).getArchName()))
327+
if (shouldLinkArch(Archs, Binary->getArchTriple().getArchName()))
332328
Results.push_back(parseOneBinary(*Binary, BinaryPath));
333329

334330
return std::move(Results);

0 commit comments

Comments
 (0)