diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 0af408ae5996..500e7a00196f 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 29d34a8c1e3e..d42231264da4 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 462a3bd58046..eef44e7b11c0 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 e4f1508029e2..813b66f1aeb6 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