diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2018-08-01 12:53:06 +0000 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2018-08-01 12:53:06 +0000 |
commit | 8acb74e01f1095f028bb19d3cd157687ddf173cc (patch) | |
tree | 3981de30ab746bdad08cb14482be2bd4d0894e01 | |
parent | 59dad0f7cd90fc2d19ffcc98a3cb8f7b7d715609 (diff) | |
download | bcm5719-llvm-8acb74e01f1095f028bb19d3cd157687ddf173cc.tar.gz bcm5719-llvm-8acb74e01f1095f028bb19d3cd157687ddf173cc.zip |
[MC] Report fatal error for DWARF types for non-ELF object files
Getting the DWARF types section is only implemented for ELF object
files. We already disabled emitting debug types in clang (r337717), but
now we also report an fatal error (rather than crashing) when trying to
obtain this section in MC. Additionally we ignore the generate debug
types flag for unsupported target triples.
See PR38190 for more information.
Differential revision: https://reviews.llvm.org/D50057
llvm-svn: 338527
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/MC/MCObjectFileInfo.cpp | 14 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/accel-tables-dwarf5.ll | 5 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/accel-tables.ll | 9 |
4 files changed, 25 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 0af408ae599..500e7a00196 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -364,7 +364,9 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) else UseSectionsAsReferences = DwarfSectionsAsReferences == Enable; - GenerateTypeUnits = GenerateDwarfTypeUnits; + // Don't generate type units for unsupported object file formats. + GenerateTypeUnits = + A->TM.getTargetTriple().isOSBinFormatELF() && GenerateDwarfTypeUnits; TheAccelTableKind = computeAccelTableKind( DwarfVersion, GenerateTypeUnits, DebuggerTuning, A->TM.getTargetTriple()); diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp index 29d34a8c1e3..d42231264da 100644 --- a/llvm/lib/MC/MCObjectFileInfo.cpp +++ b/llvm/lib/MC/MCObjectFileInfo.cpp @@ -950,8 +950,18 @@ void MCObjectFileInfo::InitMCObjectFileInfo(const Triple &TheTriple, bool PIC, } MCSection *MCObjectFileInfo::getDwarfTypesSection(uint64_t Hash) const { - return Ctx->getELFSection(".debug_types", ELF::SHT_PROGBITS, ELF::SHF_GROUP, - 0, utostr(Hash)); + switch (TT.getObjectFormat()) { + case Triple::ELF: + return Ctx->getELFSection(".debug_types", ELF::SHT_PROGBITS, ELF::SHF_GROUP, + 0, utostr(Hash)); + case Triple::MachO: + case Triple::COFF: + case Triple::Wasm: + case Triple::UnknownObjectFormat: + report_fatal_error("Cannot get DWARF types section for this object file " + "format: not implemented."); + break; + } } MCSection * diff --git a/llvm/test/DebugInfo/X86/accel-tables-dwarf5.ll b/llvm/test/DebugInfo/X86/accel-tables-dwarf5.ll index 462a3bd5804..eef44e7b11c 100644 --- a/llvm/test/DebugInfo/X86/accel-tables-dwarf5.ll +++ b/llvm/test/DebugInfo/X86/accel-tables-dwarf5.ll @@ -15,8 +15,11 @@ ; type units. Change this once DWARF v5 type units are implemented. ; RUN: llc -mtriple=x86_64-pc-linux -filetype=obj -generate-type-units -debugger-tune=lldb < %s \ ; RUN: | llvm-readobj -sections - | FileCheck --check-prefix=NONE %s + +; Debug types are ignored for non-ELF targets which means it shouldn't affect +; accelerator table generation. ; RUN: llc -mtriple=x86_64-apple-darwin12 -generate-type-units -filetype=obj < %s \ -; RUN: | llvm-readobj -sections - | FileCheck --check-prefix=NONE %s +; RUN: | llvm-readobj -sections - | FileCheck --check-prefix=DEBUG_NAMES %s ; NONE-NOT: apple_names ; NONE-NOT: debug_names diff --git a/llvm/test/DebugInfo/X86/accel-tables.ll b/llvm/test/DebugInfo/X86/accel-tables.ll index e4f1508029e..813b66f1aeb 100644 --- a/llvm/test/DebugInfo/X86/accel-tables.ll +++ b/llvm/test/DebugInfo/X86/accel-tables.ll @@ -12,12 +12,15 @@ ; RUN: llc -mtriple=x86_64-pc-linux -filetype=obj -debugger-tune=lldb < %s \ ; RUN: | llvm-readobj -sections - | FileCheck --check-prefix=DEBUG_NAMES %s -; Neither target has accelerator tables if type units are enabled, as DWARF v4 -; type units are not compatible with accelerator tables. +; No accelerator tables if type units are enabled, as DWARF v4 type units are +; not compatible with accelerator tables. ; RUN: llc -mtriple=x86_64-pc-linux -filetype=obj -generate-type-units -debugger-tune=lldb < %s \ ; RUN: | llvm-readobj -sections - | FileCheck --check-prefix=NONE %s + +; Debug types are ignored for non-ELF targets which means it shouldn't affect +; accelerator table generation. ; RUN: llc -mtriple=x86_64-apple-darwin12 -generate-type-units -filetype=obj < %s \ -; RUN: | llvm-readobj -sections - | FileCheck --check-prefix=NONE %s +; RUN: | llvm-readobj -sections - | FileCheck --check-prefix=APPLE %s ; APPLE-NOT: debug_names ; APPLE: apple_names |