From: Adrian Prantl Date: Tue, 8 Aug 2017 18:26:12 +0000 (+0000) Subject: dsymutil: support dwarf version mismatches between object and clang module X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f3855901e0f1404a8bae20e4c788281d66cecf29;p=llvm dsymutil: support dwarf version mismatches between object and clang module This adds a missing call to maybeUpdateMaxDwarfVersion when visitng a clang module. Failing to do so will cause a failure when emitting DWARF 4 forms into a CU that AsmPrinter believes to be DWARF 2. rdar://problem/33666528 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310392 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o b/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o new file mode 100644 index 00000000000..43bc63f6c5c Binary files /dev/null and b/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o differ diff --git a/test/tools/dsymutil/X86/modules-dwarf-version.m b/test/tools/dsymutil/X86/modules-dwarf-version.m new file mode 100644 index 00000000000..54e6192458b --- /dev/null +++ b/test/tools/dsymutil/X86/modules-dwarf-version.m @@ -0,0 +1,23 @@ +/* Compile with (using the module from the modules.m teastcase): + clang -c -fmodules -fmodule-map-file=modules.modulemap \ + -gdwarf-2 -gmodules -fmodules-cache-path=. \ + -Xclang -fdisable-module-hash modules.m -o 1.o +*/ + +// RUN: rm -rf %t.dir +// RUN: mkdir %t.dir +// RUN: cp %p/../Inputs/modules/Bar.pcm %t.dir +// RUN: cp %p/../Inputs/modules-dwarf-version/1.o %t.dir +// RUN: llvm-dsymutil -f -oso-prepend-path=%t.dir \ +// RUN: -y %p/dummy-debug-map.map -o - \ +// RUN: | llvm-dwarfdump --debug-dump=info - | FileCheck %s + +@import Bar; +int main(int argc, char **argv) { + struct Bar bar; + bar.value = argc; + return bar.value; +} + +// CHECK: Compile Unit: {{.*}}version = 0x0004 +// CHECK: Compile Unit: {{.*}}version = 0x0002 diff --git a/tools/dsymutil/DwarfLinker.cpp b/tools/dsymutil/DwarfLinker.cpp index fcbc2680180..f9328e42fd0 100644 --- a/tools/dsymutil/DwarfLinker.cpp +++ b/tools/dsymutil/DwarfLinker.cpp @@ -3325,8 +3325,10 @@ void DwarfLinker::loadClangModule(StringRef Filename, StringRef ModulePath, auto DwarfContext = DWARFContext::create(*ErrOrObj); RelocationManager RelocMgr(*this); for (const auto &CU : DwarfContext->compile_units()) { - auto CUDie = CU->getUnitDIE(false); + maybeUpdateMaxDwarfVersion(CU->getVersion()); + // Recursively get all modules imported by this one. + auto CUDie = CU->getUnitDIE(false); if (!registerModuleReference(CUDie, *CU, ModuleMap, Indent)) { if (Unit) { errs() << Filename << ": Clang modules are expected to have exactly"