diff options
-rw-r--r-- | include/llvm/Object/MachO.h | 10 | ||||
-rw-r--r-- | include/llvm/Object/MachOUniversal.h | 3 | ||||
-rw-r--r-- | lib/Object/MachOObjectFile.cpp | 64 | ||||
-rw-r--r-- | test/tools/dsymutil/ARM/dummy-debug-map.map | 2 | ||||
-rw-r--r-- | test/tools/dsymutil/arch-option.test | 4 | ||||
-rw-r--r-- | test/tools/llvm-objdump/ARM/macho-v7m.test | 10 | ||||
-rw-r--r-- | test/tools/llvm-symbolizer/fat.test | 4 | ||||
-rw-r--r-- | tools/dsymutil/BinaryHolder.cpp | 11 | ||||
-rw-r--r-- | tools/dsymutil/BinaryHolder.h | 2 | ||||
-rw-r--r-- | tools/dsymutil/MachODebugMapParser.cpp | 12 | ||||
-rw-r--r-- | tools/llvm-nm/llvm-nm.cpp | 4 | ||||
-rw-r--r-- | tools/llvm-objdump/MachODump.cpp | 17 | ||||
-rw-r--r-- | tools/llvm-size/llvm-size.cpp | 4 |
13 files changed, 47 insertions, 100 deletions
diff --git a/include/llvm/Object/MachO.h b/include/llvm/Object/MachO.h index ea4fc882480..852846890a1 100644 --- a/include/llvm/Object/MachO.h +++ b/include/llvm/Object/MachO.h @@ -261,7 +261,7 @@ public: StringRef getFileFormatName() const override; unsigned getArch() const override; - Triple getArch(const char **McpuDefault, Triple *ThumbTriple) const; + Triple getArchTriple(const char **McpuDefault = nullptr) const; relocation_iterator section_rel_begin(unsigned Index) const; relocation_iterator section_rel_end(unsigned Index) const; @@ -407,12 +407,8 @@ public: StringRef &Suffix); static Triple::ArchType getArch(uint32_t CPUType); - static Triple getArch(uint32_t CPUType, uint32_t CPUSubType, - const char **McpuDefault = nullptr); - static Triple getThumbArch(uint32_t CPUType, uint32_t CPUSubType, - const char **McpuDefault = nullptr); - static Triple getArch(uint32_t CPUType, uint32_t CPUSubType, - const char **McpuDefault, Triple *ThumbTriple); + static Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType, + const char **McpuDefault = nullptr); static bool isValidArch(StringRef ArchFlag); static Triple getHostArch(); diff --git a/include/llvm/Object/MachOUniversal.h b/include/llvm/Object/MachOUniversal.h index 232f6ed186c..f5bcaf6ccc6 100644 --- a/include/llvm/Object/MachOUniversal.h +++ b/include/llvm/Object/MachOUniversal.h @@ -58,7 +58,8 @@ public: uint32_t getSize() const { return Header.size; } uint32_t getAlign() const { return Header.align; } std::string getArchTypeName() const { - Triple T = MachOObjectFile::getArch(Header.cputype, Header.cpusubtype); + Triple T = + MachOObjectFile::getArchTriple(Header.cputype, Header.cpusubtype); return T.getArchName(); } diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index 743166d4bf5..a182c4f5b9b 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/lib/Object/MachOObjectFile.cpp @@ -1184,8 +1184,8 @@ Triple::ArchType MachOObjectFile::getArch(uint32_t CPUType) { } } -Triple MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType, - const char **McpuDefault) { +Triple MachOObjectFile::getArchTriple(uint32_t CPUType, uint32_t CPUSubType, + const char **McpuDefault) { if (McpuDefault) *McpuDefault = nullptr; @@ -1225,13 +1225,13 @@ Triple MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType, case MachO::CPU_SUBTYPE_ARM_V7EM: if (McpuDefault) *McpuDefault = "cortex-m4"; - return Triple("armv7em-apple-darwin"); + return Triple("thumbv7em-apple-darwin"); case MachO::CPU_SUBTYPE_ARM_V7K: return Triple("armv7k-apple-darwin"); case MachO::CPU_SUBTYPE_ARM_V7M: if (McpuDefault) *McpuDefault = "cortex-m3"; - return Triple("armv7m-apple-darwin"); + return Triple("thumbv7m-apple-darwin"); case MachO::CPU_SUBTYPE_ARM_V7S: return Triple("armv7s-apple-darwin"); default: @@ -1263,56 +1263,6 @@ Triple MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType, } } -Triple MachOObjectFile::getThumbArch(uint32_t CPUType, uint32_t CPUSubType, - const char **McpuDefault) { - if (McpuDefault) - *McpuDefault = nullptr; - - switch (CPUType) { - case MachO::CPU_TYPE_ARM: - switch (CPUSubType & ~MachO::CPU_SUBTYPE_MASK) { - case MachO::CPU_SUBTYPE_ARM_V4T: - return Triple("thumbv4t-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_V5TEJ: - return Triple("thumbv5e-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_XSCALE: - return Triple("xscale-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_V6: - return Triple("thumbv6-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_V6M: - if (McpuDefault) - *McpuDefault = "cortex-m0"; - return Triple("thumbv6m-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_V7: - return Triple("thumbv7-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_V7EM: - if (McpuDefault) - *McpuDefault = "cortex-m4"; - return Triple("thumbv7em-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_V7K: - return Triple("thumbv7k-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_V7M: - if (McpuDefault) - *McpuDefault = "cortex-m3"; - return Triple("thumbv7m-apple-darwin"); - case MachO::CPU_SUBTYPE_ARM_V7S: - return Triple("thumbv7s-apple-darwin"); - default: - return Triple(); - } - default: - return Triple(); - } -} - -Triple MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType, - const char **McpuDefault, Triple *ThumbTriple) { - Triple T = MachOObjectFile::getArch(CPUType, CPUSubType, McpuDefault); - *ThumbTriple = MachOObjectFile::getThumbArch(CPUType, CPUSubType, - McpuDefault); - return T; -} - Triple MachOObjectFile::getHostArch() { return Triple(sys::getDefaultTargetTriple()); } @@ -1342,10 +1292,8 @@ unsigned MachOObjectFile::getArch() const { return getArch(getCPUType(this)); } -Triple MachOObjectFile::getArch(const char **McpuDefault, - Triple *ThumbTriple) const { - *ThumbTriple = getThumbArch(Header.cputype, Header.cpusubtype, McpuDefault); - return getArch(Header.cputype, Header.cpusubtype, McpuDefault); +Triple MachOObjectFile::getArchTriple(const char **McpuDefault) const { + return getArchTriple(Header.cputype, Header.cpusubtype, McpuDefault); } relocation_iterator MachOObjectFile::section_rel_begin(unsigned Index) const { diff --git a/test/tools/dsymutil/ARM/dummy-debug-map.map b/test/tools/dsymutil/ARM/dummy-debug-map.map index aa69aeafedb..a6fb47dd011 100644 --- a/test/tools/dsymutil/ARM/dummy-debug-map.map +++ b/test/tools/dsymutil/ARM/dummy-debug-map.map @@ -6,7 +6,7 @@ # you can extend this file with as much object files and symbols as needed. --- -triple: 'thumbv7-apple-darwin' +triple: 'armv7-apple-darwin' objects: - filename: 1.o symbols: diff --git a/test/tools/dsymutil/arch-option.test b/test/tools/dsymutil/arch-option.test index 0920efb529d..a028bd7e060 100644 --- a/test/tools/dsymutil/arch-option.test +++ b/test/tools/dsymutil/arch-option.test @@ -14,14 +14,14 @@ RUN: not llvm-dsymutil -oso-prepend-path %p -dump-debug-map %p/Inputs/fat-test.a ARMV7: --- ARMV7-NOT: ... -ARMV7: triple: 'thumbv7-apple-darwin' +ARMV7: triple: 'armv7-apple-darwin' ARMV7-NOT: ... ARMV7: sym: _armv7_var ARMV7-NOT: --- ARMV7S: --- ARMV7S-NOT: ... -ARMV7S: triple: 'thumbv7s-apple-darwin' +ARMV7S: triple: 'armv7s-apple-darwin' ARMV7S-NOT: ... ARMV7S: sym: _armv7s_var ARMV7S-NOT: --- diff --git a/test/tools/llvm-objdump/ARM/macho-v7m.test b/test/tools/llvm-objdump/ARM/macho-v7m.test new file mode 100644 index 00000000000..938aa4f7d60 --- /dev/null +++ b/test/tools/llvm-objdump/ARM/macho-v7m.test @@ -0,0 +1,10 @@ +@ RUN: llvm-mc < %s -triple thumbv7m-apple-macho -filetype=obj | llvm-objdump -macho -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple thumbv7em-apple-macho -filetype=obj | llvm-objdump -macho -d - | FileCheck %s + + .thumb + .thumb_func _t +_t: + @ A nice Cortex-M only instruction to make sure the default CPU is sound. + msr msp, r0 + +@ CHECK: msr msp, r0
\ No newline at end of file diff --git a/test/tools/llvm-symbolizer/fat.test b/test/tools/llvm-symbolizer/fat.test index 1ecd1abb356..f943150441f 100644 --- a/test/tools/llvm-symbolizer/fat.test +++ b/test/tools/llvm-symbolizer/fat.test @@ -1,8 +1,8 @@ RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=x86_64 | FileCheck --check-prefix=X86_64 %s RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=x86_64h | FileCheck --check-prefix=X86_64H %s RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=armv7 | FileCheck --check-prefix=ARMV7 %s -RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=armv7em | FileCheck --check-prefix=ARMV7EM %s -RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=armv7m | FileCheck --check-prefix=ARMV7M %s +RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=thumbv7em | FileCheck --check-prefix=ARMV7EM %s +RUN: echo 0 | llvm-symbolizer -obj=%p/Inputs/fat.o -default-arch=thumbv7m | FileCheck --check-prefix=ARMV7M %s X86_64: x86_64_function X86_64H: x86_64h_function diff --git a/tools/dsymutil/BinaryHolder.cpp b/tools/dsymutil/BinaryHolder.cpp index 1f789e1628d..7644f01952f 100644 --- a/tools/dsymutil/BinaryHolder.cpp +++ b/tools/dsymutil/BinaryHolder.cpp @@ -19,15 +19,6 @@ 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; -} - static std::vector<MemoryBufferRef> getMachOFatMemoryBuffers(StringRef Filename, MemoryBuffer &Mem, object::MachOUniversalBinary &Fat) { @@ -175,7 +166,7 @@ ErrorOr<const object::ObjectFile &> BinaryHolder::getObjfileForArch(const Triple &T) { for (const auto &Obj : CurrentObjectFiles) { if (const auto *MachO = dyn_cast<object::MachOObjectFile>(Obj.get())) { - if (getTriple(*MachO).str() == T.str()) + if (MachO->getArchTriple().str() == T.str()) return *MachO; } else if (Obj->getArch() == T.getArch()) return *Obj; diff --git a/tools/dsymutil/BinaryHolder.h b/tools/dsymutil/BinaryHolder.h index 9d7b4bd8787..d56a39597c2 100644 --- a/tools/dsymutil/BinaryHolder.h +++ b/tools/dsymutil/BinaryHolder.h @@ -128,8 +128,6 @@ public: return Err; return cast<ObjectFileType>(*ErrOrObj); } - - static Triple getTriple(const object::MachOObjectFile &Obj); }; } } diff --git a/tools/dsymutil/MachODebugMapParser.cpp b/tools/dsymutil/MachODebugMapParser.cpp index 87577610752..0a8c4783930 100644 --- a/tools/dsymutil/MachODebugMapParser.cpp +++ b/tools/dsymutil/MachODebugMapParser.cpp @@ -137,8 +137,7 @@ void MachODebugMapParser::switchToNewDebugMapObject(StringRef Filename, } static std::string getArchName(const object::MachOObjectFile &Obj) { - Triple ThumbTriple; - Triple T = Obj.getArch(nullptr, &ThumbTriple); + Triple T = Obj.getArchTriple(); return T.getArchName(); } @@ -146,8 +145,7 @@ std::unique_ptr<DebugMap> MachODebugMapParser::parseOneBinary(const MachOObjectFile &MainBinary, StringRef BinaryPath) { loadMainBinarySymbols(MainBinary); - Result = - make_unique<DebugMap>(BinaryHolder::getTriple(MainBinary), BinaryPath); + Result = make_unique<DebugMap>(MainBinary.getArchTriple(), BinaryPath); MainBinaryStrings = MainBinary.getStringTableData(); for (const SymbolRef &Symbol : MainBinary.symbols()) { const DataRefImpl &DRI = Symbol.getRawDataRefImpl(); @@ -308,9 +306,8 @@ bool MachODebugMapParser::dumpStab() { return false; } - Triple T; for (const auto *Binary : *MainBinOrError) - if (shouldLinkArch(Archs, Binary->getArch(nullptr, &T).getArchName())) + if (shouldLinkArch(Archs, Binary->getArchTriple().getArchName())) dumpOneBinaryStab(*Binary, BinaryPath); return true; @@ -326,9 +323,8 @@ ErrorOr<std::vector<std::unique_ptr<DebugMap>>> MachODebugMapParser::parse() { return Error; std::vector<std::unique_ptr<DebugMap>> Results; - Triple T; for (const auto *Binary : *MainBinOrError) - if (shouldLinkArch(Archs, Binary->getArch(nullptr, &T).getArchName())) + if (shouldLinkArch(Archs, Binary->getArchTriple().getArchName())) Results.push_back(parseOneBinary(*Binary, BinaryPath)); return std::move(Results); diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index f86e758eb08..05ebc44ff83 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -1005,10 +1005,10 @@ static bool checkMachOAndArchFlags(SymbolicFile *O, std::string &Filename) { Triple T; if (MachO->is64Bit()) { H_64 = MachO->MachOObjectFile::getHeader64(); - T = MachOObjectFile::getArch(H_64.cputype, H_64.cpusubtype); + T = MachOObjectFile::getArchTriple(H_64.cputype, H_64.cpusubtype); } else { H = MachO->MachOObjectFile::getHeader(); - T = MachOObjectFile::getArch(H.cputype, H.cpusubtype); + T = MachOObjectFile::getArchTriple(H.cputype, H.cpusubtype); } if (std::none_of( ArchFlags.begin(), ArchFlags.end(), diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index ecf6b359146..7f256cb58fe 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -142,11 +142,18 @@ static const Target *GetTarget(const MachOObjectFile *MachOObj, const char **McpuDefault, const Target **ThumbTarget) { // Figure out the target triple. + llvm::Triple TT(TripleName); if (TripleName.empty()) { - llvm::Triple TT("unknown-unknown-unknown"); - llvm::Triple ThumbTriple = Triple(); - TT = MachOObj->getArch(McpuDefault, &ThumbTriple); + TT = MachOObj->getArchTriple(McpuDefault); TripleName = TT.str(); + } + + if (TT.getArch() == Triple::arm) { + // We've inferred a 32-bit ARM target from the object file. All MachO CPUs + // that support ARM are also capable of Thumb mode. + llvm::Triple ThumbTriple = TT; + std::string ThumbName = (Twine("thumb") + TT.getArchName().substr(3)).str(); + ThumbTriple.setArchName(ThumbName); ThumbTripleName = ThumbTriple.str(); } @@ -1157,10 +1164,10 @@ static bool checkMachOAndArchFlags(ObjectFile *O, StringRef Filename) { Triple T; if (MachO->is64Bit()) { H_64 = MachO->MachOObjectFile::getHeader64(); - T = MachOObjectFile::getArch(H_64.cputype, H_64.cpusubtype); + T = MachOObjectFile::getArchTriple(H_64.cputype, H_64.cpusubtype); } else { H = MachO->MachOObjectFile::getHeader(); - T = MachOObjectFile::getArch(H.cputype, H.cpusubtype); + T = MachOObjectFile::getArchTriple(H.cputype, H.cpusubtype); } unsigned i; for (i = 0; i < ArchFlags.size(); ++i) { diff --git a/tools/llvm-size/llvm-size.cpp b/tools/llvm-size/llvm-size.cpp index 83e75d3039e..1be173bdf54 100644 --- a/tools/llvm-size/llvm-size.cpp +++ b/tools/llvm-size/llvm-size.cpp @@ -438,10 +438,10 @@ static bool checkMachOAndArchFlags(ObjectFile *o, StringRef file) { Triple T; if (MachO->is64Bit()) { H_64 = MachO->MachOObjectFile::getHeader64(); - T = MachOObjectFile::getArch(H_64.cputype, H_64.cpusubtype); + T = MachOObjectFile::getArchTriple(H_64.cputype, H_64.cpusubtype); } else { H = MachO->MachOObjectFile::getHeader(); - T = MachOObjectFile::getArch(H.cputype, H.cpusubtype); + T = MachOObjectFile::getArchTriple(H.cputype, H.cpusubtype); } unsigned i; for (i = 0; i < ArchFlags.size(); ++i) { |