summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/tools/dsymutil/Inputs/modules-dwarf-version/1.obin0 -> 2404 bytes
-rw-r--r--llvm/test/tools/dsymutil/X86/modules-dwarf-version.m23
-rw-r--r--llvm/tools/dsymutil/DwarfLinker.cpp4
3 files changed, 26 insertions, 1 deletions
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 00000000000..43bc63f6c5c
--- /dev/null
+++ b/llvm/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o
Binary files 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 00000000000..54e6192458b
--- /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 fcbc2680180..f9328e42fd0 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"
OpenPOWER on IntegriCloud