Skip to content

Commit

Permalink
Revert "DebugInfo: Don't put fission type units in comdat sections."
Browse files Browse the repository at this point in the history
This reverts commit r208930, r208933, and r208975.

It seems not all fission consumers are ready to handle this behavior.
Reverting until tools are brought up to spec.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209338 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
dwblaikie committed May 21, 2014
1 parent cba7ac7 commit 8a0240d
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 48 deletions.
5 changes: 1 addition & 4 deletions include/llvm/MC/MCObjectFileInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ class MCObjectFileInfo {

/// These are used for the Fission separate debug information files.
const MCSection *DwarfInfoDWOSection;
const MCSection *DwarfTypesDWOSection;
const MCSection *DwarfAbbrevDWOSection;
const MCSection *DwarfStrDWOSection;
const MCSection *DwarfLineDWOSection;
Expand Down Expand Up @@ -271,9 +270,7 @@ class MCObjectFileInfo {
return DwarfInfoDWOSection;
}
const MCSection *getDwarfTypesSection(uint64_t Hash) const;
const MCSection *getDwarfTypesDWOSection() const {
return DwarfTypesDWOSection;
}
const MCSection *getDwarfTypesDWOSection(uint64_t Hash) const;
const MCSection *getDwarfAbbrevDWOSection() const {
return DwarfAbbrevDWOSection;
}
Expand Down
24 changes: 10 additions & 14 deletions lib/CodeGen/AsmPrinter/DwarfDebug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1588,12 +1588,9 @@ void DwarfDebug::emitSectionLabels() {
// Dwarf sections base addresses.
DwarfInfoSectionSym =
emitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
if (useSplitDwarf()) {
if (useSplitDwarf())
DwarfInfoDWOSectionSym =
emitSectionSym(Asm, TLOF.getDwarfInfoDWOSection(), "section_info_dwo");
DwarfTypesDWOSectionSym =
emitSectionSym(Asm, TLOF.getDwarfTypesDWOSection(), "section_types_dwo");
}
DwarfAbbrevSectionSym =
emitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
if (useSplitDwarf())
Expand Down Expand Up @@ -2357,9 +2354,9 @@ void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
bool TopLevelType = TypeUnitsUnderConstruction.empty();
AddrPool.resetUsedFlag();

auto OwnedUnit = make_unique<DwarfTypeUnit>(
InfoHolder.getUnits().size() + TypeUnitsUnderConstruction.size(), CU, Asm,
this, &InfoHolder, getDwoLineTable(CU));
auto OwnedUnit =
make_unique<DwarfTypeUnit>(InfoHolder.getUnits().size(), CU, Asm, this,
&InfoHolder, getDwoLineTable(CU));
DwarfTypeUnit &NewTU = *OwnedUnit;
DIE &UnitDie = NewTU.getUnitDie();
TU = &NewTU;
Expand All @@ -2372,14 +2369,13 @@ void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
uint64_t Signature = makeTypeSignature(Identifier);
NewTU.setTypeSignature(Signature);

if (useSplitDwarf())
NewTU.initSection(Asm->getObjFileLowering().getDwarfTypesDWOSection(),
DwarfTypesDWOSectionSym);
else {
if (!useSplitDwarf())
CU.applyStmtList(UnitDie);
NewTU.initSection(
Asm->getObjFileLowering().getDwarfTypesSection(Signature));
}

NewTU.initSection(
useSplitDwarf()
? Asm->getObjFileLowering().getDwarfTypesDWOSection(Signature)
: Asm->getObjFileLowering().getDwarfTypesSection(Signature));

NewTU.setType(NewTU.createTypeDIE(CTy));

Expand Down
1 change: 0 additions & 1 deletion lib/CodeGen/AsmPrinter/DwarfDebug.h
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,6 @@ class DwarfDebug : public AsmPrinterHandler {
MCSymbol *DwarfDebugLocSectionSym, *DwarfLineSectionSym, *DwarfAddrSectionSym;
MCSymbol *FunctionBeginSym, *FunctionEndSym;
MCSymbol *DwarfInfoDWOSectionSym, *DwarfAbbrevDWOSectionSym;
MCSymbol *DwarfTypesDWOSectionSym;
MCSymbol *DwarfStrDWOSectionSym;
MCSymbol *DwarfGnuPubNamesSectionSym, *DwarfGnuPubTypesSectionSym;

Expand Down
4 changes: 0 additions & 4 deletions lib/CodeGen/AsmPrinter/DwarfUnit.h
Original file line number Diff line number Diff line change
Expand Up @@ -577,10 +577,6 @@ class DwarfTypeUnit : public DwarfUnit {
sizeof(uint32_t); // Type DIE Offset
}
void initSection(const MCSection *Section);
// Bring in the base function (taking two args, including the section symbol)
// for use when building DWO type units (they don't go in unique comdat
// sections)
using DwarfUnit::initSection;
DwarfCompileUnit &getCU() override { return CU; }

protected:
Expand Down
14 changes: 7 additions & 7 deletions lib/MC/MCObjectFileInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -537,9 +537,6 @@ void MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) {
DwarfInfoDWOSection =
Ctx->getELFSection(".debug_info.dwo", ELF::SHT_PROGBITS, 0,
SectionKind::getMetadata());
DwarfTypesDWOSection =
Ctx->getELFSection(".debug_types.dwo", ELF::SHT_PROGBITS, 0,
SectionKind::getMetadata());
DwarfAbbrevDWOSection =
Ctx->getELFSection(".debug_abbrev.dwo", ELF::SHT_PROGBITS, 0,
SectionKind::getMetadata());
Expand Down Expand Up @@ -709,10 +706,6 @@ void MCObjectFileInfo::InitCOFFMCObjectFileInfo(Triple T) {
Ctx->getCOFFSection(".debug_info.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
COFF::IMAGE_SCN_MEM_READ,
SectionKind::getMetadata());
DwarfTypesDWOSection =
Ctx->getCOFFSection(".debug_types.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
COFF::IMAGE_SCN_MEM_READ,
SectionKind::getMetadata());
DwarfAbbrevDWOSection =
Ctx->getCOFFSection(".debug_abbrev.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
COFF::IMAGE_SCN_MEM_READ,
Expand Down Expand Up @@ -814,6 +807,13 @@ const MCSection *MCObjectFileInfo::getDwarfTypesSection(uint64_t Hash) const {
SectionKind::getMetadata(), 0, utostr(Hash));
}

const MCSection *
MCObjectFileInfo::getDwarfTypesDWOSection(uint64_t Hash) const {
return Ctx->getELFSection(".debug_types.dwo", ELF::SHT_PROGBITS,
ELF::SHF_GROUP, SectionKind::getMetadata(), 0,
utostr(Hash));
}

void MCObjectFileInfo::InitEHFrameSection() {
if (Env == IsMachO)
EHFrameSection =
Expand Down
20 changes: 2 additions & 18 deletions test/DebugInfo/X86/generate-odr-hash.ll
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
; REQUIRES: object-emission

; RUN: llc < %s -o %t -filetype=obj -O0 -generate-type-units -mtriple=x86_64-unknown-linux-gnu
; RUN: llc %s -o %t -filetype=obj -O0 -generate-type-units -mtriple=x86_64-unknown-linux-gnu
; RUN: llvm-dwarfdump %t | FileCheck --check-prefix=CHECK --check-prefix=SINGLE %s
; RUN: llvm-readobj -s -t %t | FileCheck --check-prefix=OBJ_COMMON %s

; RUN: llc < %s -split-dwarf=Enable -o %t -filetype=obj -O0 -generate-type-units -mtriple=x86_64-unknown-linux-gnu
; RUN: llc %s -split-dwarf=Enable -o %t -filetype=obj -O0 -generate-type-units -mtriple=x86_64-unknown-linux-gnu
; RUN: llvm-dwarfdump %t | FileCheck --check-prefix=CHECK --check-prefix=FISSION %s
; RUN: llvm-readobj -s -t %t | FileCheck --check-prefix=OBJ_COMMON --check-prefix=OBJ_FISSION %s

; Generated from bar.cpp:

Expand Down Expand Up @@ -163,20 +161,6 @@
; CHECK-NEXT: [[FLUFFY]] "echidna::capybara::mongoose::fluffy"
; CHECK-NEXT: [[WALRUS]] "walrus"

; Make sure debug_types are in comdat groups. This could be more rigid to check
; that they're the right comdat groups (each type in a separate comdat group,
; etc)
; OBJ_COMMON: Name: .debug_types (
; OBJ_COMMON-NOT: }
; OBJ_COMMON: SHF_GROUP

; Fission type units don't go in comdat groups, since their linker is debug
; aware it's handled using the debug info semantics rather than raw ELF object
; semantics.
; OBJ_FISSION: Name: .debug_types.dwo (
; OBJ_FISSION-NOT: SHF_GROUP
; OBJ_FISSION: }

%struct.bar = type { i8 }
%"class.echidna::capybara::mongoose::fluffy" = type { i32, i32 }
%"struct.<anonymous namespace>::walrus" = type { i8 }
Expand Down

0 comments on commit 8a0240d

Please sign in to comment.