diff options
| author | Adrian Prantl <aprantl@apple.com> | 2017-08-08 18:26:12 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2017-08-08 18:26:12 +0000 |
| commit | e502f005383568e3e3d22e1e0a9005c29572e720 (patch) | |
| tree | a9dac4d8f36ef37c946705fa5408b82bc1bd12da | |
| parent | 367c63dc1146b0d9dfe1fb436f71191b6364f9c6 (diff) | |
| download | bcm5719-llvm-e502f005383568e3e3d22e1e0a9005c29572e720.tar.gz bcm5719-llvm-e502f005383568e3e3d22e1e0a9005c29572e720.zip | |
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
| -rw-r--r-- | llvm/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o | bin | 0 -> 2404 bytes | |||
| -rw-r--r-- | llvm/test/tools/dsymutil/X86/modules-dwarf-version.m | 23 | ||||
| -rw-r--r-- | llvm/tools/dsymutil/DwarfLinker.cpp | 4 |
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 Binary files differnew file mode 100644 index 00000000000..43bc63f6c5c --- /dev/null +++ b/llvm/test/tools/dsymutil/Inputs/modules-dwarf-version/1.o 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" |

