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-Tag: llvmorg-6.0.0-rc1~10587 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e502f005383568e3e3d22e1e0a9005c29572e720;p=platform%2Fupstream%2Fllvm.git 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 llvm-svn: 310392 --- diff --git a/llvm/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o b/llvm/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o new file mode 100644 index 0000000..43bc63f Binary files /dev/null and b/llvm/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o differ diff --git a/llvm/test/tools/dsymutil/X86/modules-dwarf-version.m b/llvm/test/tools/dsymutil/X86/modules-dwarf-version.m new file mode 100644 index 0000000..54e6192 --- /dev/null +++ b/llvm/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/llvm/tools/dsymutil/DwarfLinker.cpp b/llvm/tools/dsymutil/DwarfLinker.cpp index fcbc268..f9328e4 100644 --- a/llvm/tools/dsymutil/DwarfLinker.cpp +++ b/llvm/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"