[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
This commit is contained in:
Jonas Devlieghere 2018-08-01 12:53:06 +00:00
parent 59dad0f7cd
commit 8acb74e01f
4 changed files with 25 additions and 7 deletions

View File

@ -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());

View File

@ -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 *

View File

@ -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

View File

@ -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