[llvm] r310392 - dsymutil: support dwarf version mismatches between object and clang module

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 8 11:26:12 PDT 2017


Author: adrian
Date: Tue Aug  8 11:26:12 2017
New Revision: 310392

URL: http://llvm.org/viewvc/llvm-project?rev=310392&view=rev
Log:
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

Added:
    llvm/trunk/test/tools/dsymutil/Inputs/modules-dwarf-version/
    llvm/trunk/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o
    llvm/trunk/test/tools/dsymutil/X86/modules-dwarf-version.m
Modified:
    llvm/trunk/tools/dsymutil/DwarfLinker.cpp

Added: llvm/trunk/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o?rev=310392&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o (added) and llvm/trunk/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o Tue Aug  8 11:26:12 2017 differ

Added: llvm/trunk/test/tools/dsymutil/X86/modules-dwarf-version.m
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/X86/modules-dwarf-version.m?rev=310392&view=auto
==============================================================================
--- llvm/trunk/test/tools/dsymutil/X86/modules-dwarf-version.m (added)
+++ llvm/trunk/test/tools/dsymutil/X86/modules-dwarf-version.m Tue Aug  8 11:26:12 2017
@@ -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
+
+ at 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

Modified: llvm/trunk/tools/dsymutil/DwarfLinker.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/DwarfLinker.cpp?rev=310392&r1=310391&r2=310392&view=diff
==============================================================================
--- llvm/trunk/tools/dsymutil/DwarfLinker.cpp (original)
+++ llvm/trunk/tools/dsymutil/DwarfLinker.cpp Tue Aug  8 11:26:12 2017
@@ -3325,8 +3325,10 @@ void DwarfLinker::loadClangModule(String
   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"




More information about the llvm-commits mailing list