Index: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp =================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -364,7 +364,9 @@ 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()); Index: llvm/trunk/lib/MC/MCObjectFileInfo.cpp =================================================================== --- llvm/trunk/lib/MC/MCObjectFileInfo.cpp +++ llvm/trunk/lib/MC/MCObjectFileInfo.cpp @@ -950,8 +950,18 @@ } 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 * Index: llvm/trunk/test/DebugInfo/X86/accel-tables-dwarf5.ll =================================================================== --- llvm/trunk/test/DebugInfo/X86/accel-tables-dwarf5.ll +++ llvm/trunk/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 Index: llvm/trunk/test/DebugInfo/X86/accel-tables.ll =================================================================== --- llvm/trunk/test/DebugInfo/X86/accel-tables.ll +++ llvm/trunk/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