From f4ad7592cd358241a59690321ee4aaf468c35cb4 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Wed, 23 Sep 2015 17:11:10 +0000 Subject: [PATCH] dsymutil: print a warning when there is a module hash mismatch. This also updates the module binaries in the test directory because their module hash mismatched. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248396 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/dsymutil/Inputs/mismatch/1.o | Bin 0 -> 1980 bytes .../dsymutil/Inputs/mismatch/mismatch.pcm | Bin 0 -> 24940 bytes test/tools/dsymutil/Inputs/modules/1.o | Bin 2392 -> 2392 bytes test/tools/dsymutil/Inputs/modules/Bar.pcm | Bin 25520 -> 25532 bytes test/tools/dsymutil/Inputs/modules/Foo.pcm | Bin 25448 -> 25464 bytes test/tools/dsymutil/X86/mismatch.m | 23 +++++++++ test/tools/dsymutil/X86/modules.m | 7 ++- tools/dsymutil/DwarfLinker.cpp | 47 +++++++++++++----- 8 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 test/tools/dsymutil/Inputs/mismatch/1.o create mode 100644 test/tools/dsymutil/Inputs/mismatch/mismatch.pcm create mode 100644 test/tools/dsymutil/X86/mismatch.m diff --git a/test/tools/dsymutil/Inputs/mismatch/1.o b/test/tools/dsymutil/Inputs/mismatch/1.o new file mode 100644 index 0000000000000000000000000000000000000000..45d176c96be1a3672b7719d71062edc5bb66b028 GIT binary patch literal 1980 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 FMF4A1a-jeK delta 533 zcmdmUoN>c(#t9CB^Wqr5-~$VUp0_dZJR_s~WJM--!H8Ihm=}a%@R(f5WG}b~Dhd^3 zm^Aq$lBfz)c+zA^W_!V7P_;18ZId&BqOZ_IZ%y9GY%jzIbx9i3gnvnsxmfH3OQ6D9 zP~nuxku2t%6OtJi7=a=SHqT^n)ZjI;FxF&XQ0Dw68WSF}`MJ(+M&XAyjSqM+IwcnA zWdPNwL>%0lzIm%&7_$`Pd{G1AhDn*Md4I$l{)zcq7GQZ%aEYr#!*8;xkv?ZV(4qqw zj11kAV~wO4YbIA3X|k?oP+(-3yxd5a#g+L1)8sowcbI`TZr*L�X|Mn5w9&ewoLW zEC93$gqunfBskbYSs12j33%l)GV}qlLOvry!{pAGLM|2w4h8`kHlVsmu}(r&NBca* z82GmWxgcSY*c+1-3{56~h-aB>5GS&^A})&=WYOfOi8_--lFS+1Ci^7GX)`$j z)w=?*JrFa4I4q0`Ebc(s35XdLfds2Bh+tuud@w0s^4p{o5gj037>I!YBn1jXr^%_w KW|QY6D*yl&v~*Vh diff --git a/test/tools/dsymutil/Inputs/modules/Foo.pcm b/test/tools/dsymutil/Inputs/modules/Foo.pcm index 2416a405443150c1b699d03631be864bf8282d79..33bca2a6547bb8f58f7863ac0247591ad88ba877 100644 GIT binary patch delta 686 zcmaEHjPb`Y#t9CBsc{To@PP$Fr%nv)XM8d7p}XLVXov_0gkrcc*^<#-@B>sd0xJ4o zawkyKBL>QaQWleMB8g_hMKzi11vf+0_CZA#Pp$-tI>w@!U^w|ClBfz)(r~gQv%O#{ zR4q(2baEz8v=dFVa`H}~=vt^~8q|cjlQ~)Jg@mEL4uXm@Cr^%IG2@I#W?*0h3T14b z$>ONNYiwww$-tn@>9;MVylnDw9aH|~wI6Js^_O$5bM)G+?8UcPTX!;}uwr-g0WU_k z{CvF(pk5UQC;9D@FX~w{7ER{WuV!@I+^N5gQEtICuMJHNtPj_UnrJ_GvrhEDdQk<| z#shPc?S zn99TOfC*^NWDTP`%s>}zW;bqP1T%U}RMb^nmPGL+2ms{`7#NyL6eKvsBi3W{ ziC8ygkl~XB6OEZSI delta 695 zcmexyjPb=W#t9CBVQ~y#@PP$FhfNIZXM8g8p}XLdXov_0gkrcd*^<#-@C{Tn0xEiE zawkyKB?iicQYMpcB8g_eMKzi11=m2;wn0VbOs)iq8pWcTpfvd;lBfz)Qfaazv%O## zR4q)@ZE_}1vONNYh+=p$-tn@`R)GFc%#YBbxiqxt~p@KcKbQUx`X?hUUzYA*4CZODE#oI@c}PJ zxBPrPkVjP_4sK4Ld{NJuv2Zf4el=tE=1%=}jB*T@yf!p7ur6F8YNGvM%~H{ZWugkK zjR(GLX-a1cNS_>PXfIfy#lUbqk&$5rkPb;=WLPqJsi87s&E%7Ynyl*?6c`yMe>c=+ zab!4l~eoo4Jjf7{QDQCMxQxU*>To3jm#90K`ot3KAS_p)3rmv;B&AZUP2QtE}t&Oz<&y;90bnKW1PGqCS`IhX3`!JkeR|j3modules.modulemap < mismatch.h + clang -cc1 -emit-obj -fmodules -fmodule-map-file=modules.modulemap \ + -fmodule-format=obj -g -dwarf-ext-refs -fmodules-cache-path=. \ + -fdisable-module-hash mismatch.m -o 1.o + echo > mismatch.h + clang -cc1 -emit-obj -fmodules -fmodule-map-file=modules.modulemap \ + -fmodule-format=obj -g -dwarf-ext-refs -fmodules-cache-path=. \ + -fdisable-module-hash mismatch.m -o /dev/null +*/ + +// RUN: llvm-dsymutil -f -oso-prepend-path=%p/../Inputs/mismatch \ +// RUN: -y %p/dummy-debug-map.map -o - 2>&1 | FileCheck %s + +@import mismatch; + +void f() {} +// CHECK: warning: hash mismatch diff --git a/test/tools/dsymutil/X86/modules.m b/test/tools/dsymutil/X86/modules.m index 6a93f28587a..c17e1632b95 100644 --- a/test/tools/dsymutil/X86/modules.m +++ b/test/tools/dsymutil/X86/modules.m @@ -20,6 +20,11 @@ // RUN: -y %p/dummy-debug-map.map -o - \ // RUN: | llvm-dwarfdump --debug-dump=info - | FileCheck %s +// RUN: llvm-dsymutil -f -oso-prepend-path=%p/../Inputs/modules -y \ +// RUN: %p/dummy-debug-map.map -o %t 2>&1 | FileCheck --check-prefix=WARN %s + +// WARN-NOT: warning: hash mismatch + // --------------------------------------------------------------------- #ifdef BAR_H // --------------------------------------------------------------------- @@ -37,7 +42,7 @@ struct Bar { // --------------------------------------------------------------------- #ifdef FOO_H // --------------------------------------------------------------------- -// CHECK: 55{{.*}}DW_TAG_compile_unit +// CHECK: DW_TAG_compile_unit // CHECK: DW_TAG_module // CHECK-NEXT: DW_AT_name {{.*}}"Foo" // CHECK: DW_TAG_typedef diff --git a/tools/dsymutil/DwarfLinker.cpp b/tools/dsymutil/DwarfLinker.cpp index fb7ffceec8f..6bd4f2c42a5 100644 --- a/tools/dsymutil/DwarfLinker.cpp +++ b/tools/dsymutil/DwarfLinker.cpp @@ -13,7 +13,7 @@ #include "MachOUtils.h" #include "NonRelocatableStringpool.h" #include "llvm/ADT/IntervalMap.h" -#include "llvm/ADT/StringSet.h" +#include "llvm/ADT/StringMap.h" #include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/AsmPrinter.h" #include "llvm/CodeGen/DIE.h" @@ -1205,7 +1205,7 @@ private: /// Recursively add the debug info in this clang module .pcm /// file (and all the modules imported by it in a bottom-up fashion) /// to Units. - void loadClangModule(StringRef Filename, StringRef ModulePath, + void loadClangModule(StringRef Filename, StringRef ModulePath, uint64_t DwoId, DebugMap &ModuleMap, unsigned Indent = 0); /// \brief Flags passed to DwarfLinker::lookForDIEsToKeep @@ -1448,8 +1448,8 @@ private: /// debug_frame section. uint32_t LastCIEOffset; - /// FIXME: We may need to use something more resilient than the PCM filename. - StringSet<> ClangModules; + /// Mapping the PCM filename to the DwoId. + StringMap ClangModules; }; /// Similar to DWARFUnitSection::getUnitForOffset(), but returning our @@ -3091,24 +3091,42 @@ void DwarfLinker::DIECloner::copyAbbrev( Linker.AssignAbbrev(Copy); } +static uint64_t getDwoId(const DWARFDebugInfoEntryMinimal &CUDie, + const DWARFUnit &Unit) { + uint64_t DwoId = + CUDie.getAttributeValueAsUnsignedConstant(&Unit, dwarf::DW_AT_dwo_id, 0); + if (!DwoId) + DwoId = CUDie.getAttributeValueAsUnsignedConstant(&Unit, + dwarf::DW_AT_GNU_dwo_id, 0); + return DwoId; +} + bool DwarfLinker::registerModuleReference( const DWARFDebugInfoEntryMinimal &CUDie, const DWARFUnit &Unit, DebugMap &ModuleMap, unsigned Indent) { std::string PCMfile = - CUDie.getAttributeValueAsString(&Unit, dwarf::DW_AT_GNU_dwo_name, ""); + CUDie.getAttributeValueAsString(&Unit, dwarf::DW_AT_dwo_name, ""); + if (PCMfile.empty()) + PCMfile = + CUDie.getAttributeValueAsString(&Unit, dwarf::DW_AT_GNU_dwo_name, ""); if (PCMfile.empty()) return false; // Clang module DWARF skeleton CUs abuse this for the path to the module. std::string PCMpath = CUDie.getAttributeValueAsString(&Unit, dwarf::DW_AT_comp_dir, ""); + uint64_t DwoId = getDwoId(CUDie, Unit); if (Options.Verbose) { outs().indent(Indent); outs() << "Found clang module reference " << PCMfile; } - if (ClangModules.count(PCMfile)) { + auto Cached = ClangModules.find(PCMfile); + if (Cached != ClangModules.end()) { + if (Cached->second != DwoId) + reportWarning(Twine("hash mismatch: this object file was built against a " + "different version of the module ") + PCMfile); if (Options.Verbose) outs() << " [cached].\n"; return true; @@ -3118,8 +3136,8 @@ bool DwarfLinker::registerModuleReference( // Cyclic dependencies are disallowed by Clang, but we still // shouldn't run into an infinite loop, so mark it as processed now. - ClangModules.insert(PCMfile); - loadClangModule(PCMfile, PCMpath, ModuleMap, Indent + 2); + ClangModules.insert({PCMfile, DwoId}); + loadClangModule(PCMfile, PCMpath, DwoId, ModuleMap, Indent + 2); return true; } @@ -3139,7 +3157,8 @@ DwarfLinker::loadObject(BinaryHolder &BinaryHolder, DebugMapObject &Obj, } void DwarfLinker::loadClangModule(StringRef Filename, StringRef ModulePath, - DebugMap &ModuleMap, unsigned Indent) { + uint64_t DwoId, DebugMap &ModuleMap, + unsigned Indent) { SmallString<80> Path(Options.PrependPath); if (sys::path::is_relative(Filename)) sys::path::append(Path, ModulePath, Filename); @@ -3154,9 +3173,6 @@ void DwarfLinker::loadClangModule(StringRef Filename, StringRef ModulePath, return; } - // FIXME: At this point dsymutil should verify the DW_AT_gnu_dwo_id - // against the module hash of the clang module. - std::unique_ptr Unit; // Setup access to the debug info. @@ -3166,12 +3182,17 @@ void DwarfLinker::loadClangModule(StringRef Filename, StringRef ModulePath, auto *CUDie = CU->getUnitDIE(false); // Recursively get all modules imported by this one. if (!registerModuleReference(*CUDie, *CU, ModuleMap, Indent)) { - // Add this module. if (Unit) { errs() << Filename << ": Clang modules are expected to have exactly" << " 1 compile unit.\n"; exitDsymutil(1); } + if (getDwoId(*CUDie, *CU) != DwoId) + reportWarning( + Twine("hash mismatch: this object file was built against a " + "different version of the module ") + Filename); + + // Add this module. Unit = llvm::make_unique(*CU, UnitID++, !Options.NoODR); Unit->setHasInterestingContent(); gatherDIEParents(CUDie, 0, *Unit, &ODRContexts.getRoot(), StringPool, -- 2.34.1