From: Frederic Riss Date: Tue, 25 Aug 2015 18:19:48 +0000 (+0000) Subject: [dsymutil] Rewrite thumb triple names in user visible messages. X-Git-Tag: android-x86-7.1-r4~44240 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0e221a0b654e7451823fdb3b3525c39b77d061d0;p=android-x86%2Fexternal-llvm.git [dsymutil] Rewrite thumb triple names in user visible messages. We autodetect triples from the input file(s) while reading the mach-o debug map. As we need to create a Target from those triples, we always chose the thumb variant (because the arm variant might not be 'instantiable' eg armv7m). The user visible architecture names should still be 'arm' and not 'thumb' variants though. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245960 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/dsymutil/ARM/empty-map.test b/test/tools/dsymutil/ARM/empty-map.test index 4cc0e5f67b5..54d9a35cc6e 100644 --- a/test/tools/dsymutil/ARM/empty-map.test +++ b/test/tools/dsymutil/ARM/empty-map.test @@ -5,4 +5,4 @@ triple: 'thumbv7-apple-darwin' ... -# CHECK: warning: no debug symbols in executable (-arch thumbv7) +# CHECK: warning: no debug symbols in executable (-arch armv7) diff --git a/test/tools/dsymutil/ARM/fat-arch-name.test b/test/tools/dsymutil/ARM/fat-arch-name.test new file mode 100644 index 00000000000..a8b7ca92c58 --- /dev/null +++ b/test/tools/dsymutil/ARM/fat-arch-name.test @@ -0,0 +1,21 @@ +# REQUIRES: object-emission +# RUN: llvm-dsymutil %p/../Inputs/fat-test.arm.dylib -o %t.dSYM -verbose 2>&1 | FileCheck %s + +# We detect thumb triples from the binaries, because those are the only ones +# that are guaranteed to be able to generate a Target instance (for example +# we would detect armv7m-apple-darwin as non-thumb triple, but you can't +# instantiate a Target from that). In the user-visible architecture names, and +# in the lipo invocation, we need to rewrite the thumb arch names to the arm +# ones. + +# CHECK: warning: no debug symbols in executable (-arch armv7) + +# CHECK: warning: no debug symbols in executable (-arch armv7s) + +# CHECK: warning: no debug symbols in executable (-arch arm64) + +# CHECK: Running lipo +# CHECK-NEXT: lipo -create +# CHECK-SAME: -segalign armv7 +# CHECK-SAME: -segalign armv7s +# CHECK-SAME: -segalign arm64 diff --git a/tools/dsymutil/MachOUtils.cpp b/tools/dsymutil/MachOUtils.cpp index 15605fe00eb..8f4d2610b8f 100644 --- a/tools/dsymutil/MachOUtils.cpp +++ b/tools/dsymutil/MachOUtils.cpp @@ -17,6 +17,12 @@ namespace llvm { namespace dsymutil { namespace MachOUtils { +std::string getArchName(StringRef Arch) { + if (Arch.startswith("thumb")) + return (llvm::Twine("arm") + Arch.drop_front(5)).str(); + return Arch; +} + static bool runLipo(SmallVectorImpl &Args) { auto Path = sys::findProgramByName("lipo"); @@ -64,6 +70,7 @@ bool generateUniversalBinary(SmallVectorImpl &ArchFiles, // Align segments to match dsymutil-classic alignment for (auto &Thin : ArchFiles) { + Thin.Arch = getArchName(Thin.Arch); Args.push_back("-segalign"); Args.push_back(Thin.Arch.c_str()); Args.push_back("20"); diff --git a/tools/dsymutil/MachOUtils.h b/tools/dsymutil/MachOUtils.h index f1b2ad9dadd..d6b6f3d61c3 100644 --- a/tools/dsymutil/MachOUtils.h +++ b/tools/dsymutil/MachOUtils.h @@ -24,6 +24,8 @@ struct ArchAndFilename { bool generateUniversalBinary(SmallVectorImpl &ArchFiles, StringRef OutputFileName, const LinkOptions &); + +std::string getArchName(StringRef Arch); } } } diff --git a/tools/dsymutil/dsymutil.cpp b/tools/dsymutil/dsymutil.cpp index 3d9851eca7e..9e112ba0727 100644 --- a/tools/dsymutil/dsymutil.cpp +++ b/tools/dsymutil/dsymutil.cpp @@ -301,7 +301,8 @@ int main(int argc, char **argv) { if (Map->begin() == Map->end()) llvm::errs() << "warning: no debug symbols in executable (-arch " - << Map->getTriple().getArchName() << ")\n"; + << MachOUtils::getArchName(Map->getTriple().getArchName()) + << ")\n"; std::string OutputFile = getOutputFileName(InputFile, NeedsTempFiles); if (OutputFile.empty() || !linkDwarf(OutputFile, *Map, Options))