mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 06:29:05 +00:00
Remove support for the .debug_inlined section. No known software
in use supports it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189439 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -316,10 +316,6 @@ namespace llvm {
|
|||||||
/// SupportsExceptionHandling - True if target supports exception handling.
|
/// SupportsExceptionHandling - True if target supports exception handling.
|
||||||
ExceptionHandling::ExceptionsType ExceptionsType; // Defaults to None
|
ExceptionHandling::ExceptionsType ExceptionsType; // Defaults to None
|
||||||
|
|
||||||
/// DwarfUsesInlineInfoSection - True if DwarfDebugInlineSection is used to
|
|
||||||
/// encode inline subroutine information.
|
|
||||||
bool DwarfUsesInlineInfoSection; // Defaults to false.
|
|
||||||
|
|
||||||
/// DwarfUsesRelocationsAcrossSections - True if Dwarf2 output generally
|
/// DwarfUsesRelocationsAcrossSections - True if Dwarf2 output generally
|
||||||
/// uses relocations for references to other .debug_* sections.
|
/// uses relocations for references to other .debug_* sections.
|
||||||
bool DwarfUsesRelocationsAcrossSections;
|
bool DwarfUsesRelocationsAcrossSections;
|
||||||
@@ -558,9 +554,6 @@ namespace llvm {
|
|||||||
ExceptionsType == ExceptionHandling::ARM ||
|
ExceptionsType == ExceptionHandling::ARM ||
|
||||||
ExceptionsType == ExceptionHandling::Win64);
|
ExceptionsType == ExceptionHandling::Win64);
|
||||||
}
|
}
|
||||||
bool doesDwarfUseInlineInfoSection() const {
|
|
||||||
return DwarfUsesInlineInfoSection;
|
|
||||||
}
|
|
||||||
bool doesDwarfUseRelocationsAcrossSections() const {
|
bool doesDwarfUseRelocationsAcrossSections() const {
|
||||||
return DwarfUsesRelocationsAcrossSections;
|
return DwarfUsesRelocationsAcrossSections;
|
||||||
}
|
}
|
||||||
|
@@ -538,22 +538,6 @@ DIE *DwarfDebug::constructInlinedScopeDIE(CompileUnit *TheCU,
|
|||||||
TheCU->getUniqueID()));
|
TheCU->getUniqueID()));
|
||||||
TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
|
TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
|
||||||
|
|
||||||
// Track the start label for this inlined function.
|
|
||||||
//.debug_inlined section specification does not clearly state how
|
|
||||||
// to emit inlined scopes that are split into multiple instruction ranges.
|
|
||||||
// For now, use the first instruction range and emit low_pc/high_pc pair and
|
|
||||||
// corresponding the .debug_inlined section entry for this pair.
|
|
||||||
if (Asm->MAI->doesDwarfUseInlineInfoSection()) {
|
|
||||||
MCSymbol *StartLabel = getLabelBeforeInsn(Ranges.begin()->first);
|
|
||||||
InlineInfoMap::iterator I = InlineInfo.find(InlinedSP);
|
|
||||||
|
|
||||||
if (I == InlineInfo.end()) {
|
|
||||||
InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel, ScopeDIE));
|
|
||||||
InlinedSPNodes.push_back(InlinedSP);
|
|
||||||
} else
|
|
||||||
I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add name to the name table, we do this here because we're guaranteed
|
// Add name to the name table, we do this here because we're guaranteed
|
||||||
// to have concrete versions of our DW_TAG_inlined_subprogram nodes.
|
// to have concrete versions of our DW_TAG_inlined_subprogram nodes.
|
||||||
addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
|
addSubprogramNames(TheCU, InlinedSP, ScopeDIE);
|
||||||
@@ -1090,12 +1074,6 @@ void DwarfDebug::endModule() {
|
|||||||
// Emit info into a debug macinfo section.
|
// Emit info into a debug macinfo section.
|
||||||
emitDebugMacInfo();
|
emitDebugMacInfo();
|
||||||
|
|
||||||
// Emit inline info.
|
|
||||||
// TODO: When we don't need the option anymore we
|
|
||||||
// can remove all of the code that this section
|
|
||||||
// depends upon.
|
|
||||||
if (useDarwinGDBCompat())
|
|
||||||
emitDebugInlineInfo();
|
|
||||||
} else {
|
} else {
|
||||||
// TODO: Fill this in for separated debug sections and separate
|
// TODO: Fill this in for separated debug sections and separate
|
||||||
// out information into new sections.
|
// out information into new sections.
|
||||||
@@ -1123,12 +1101,6 @@ void DwarfDebug::endModule() {
|
|||||||
// Emit DWO addresses.
|
// Emit DWO addresses.
|
||||||
InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
|
InfoHolder.emitAddresses(Asm->getObjFileLowering().getDwarfAddrSection());
|
||||||
|
|
||||||
// Emit inline info.
|
|
||||||
// TODO: When we don't need the option anymore we
|
|
||||||
// can remove all of the code that this section
|
|
||||||
// depends upon.
|
|
||||||
if (useDarwinGDBCompat())
|
|
||||||
emitDebugInlineInfo();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emit info into the dwarf accelerator table sections.
|
// Emit info into the dwarf accelerator table sections.
|
||||||
@@ -2602,83 +2574,6 @@ void DwarfDebug::emitDebugMacInfo() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emit inline info using following format.
|
|
||||||
// Section Header:
|
|
||||||
// 1. length of section
|
|
||||||
// 2. Dwarf version number
|
|
||||||
// 3. address size.
|
|
||||||
//
|
|
||||||
// Entries (one "entry" for each function that was inlined):
|
|
||||||
//
|
|
||||||
// 1. offset into __debug_str section for MIPS linkage name, if exists;
|
|
||||||
// otherwise offset into __debug_str for regular function name.
|
|
||||||
// 2. offset into __debug_str section for regular function name.
|
|
||||||
// 3. an unsigned LEB128 number indicating the number of distinct inlining
|
|
||||||
// instances for the function.
|
|
||||||
//
|
|
||||||
// The rest of the entry consists of a {die_offset, low_pc} pair for each
|
|
||||||
// inlined instance; the die_offset points to the inlined_subroutine die in the
|
|
||||||
// __debug_info section, and the low_pc is the starting address for the
|
|
||||||
// inlining instance.
|
|
||||||
void DwarfDebug::emitDebugInlineInfo() {
|
|
||||||
if (!Asm->MAI->doesDwarfUseInlineInfoSection())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!FirstCU)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Asm->OutStreamer.SwitchSection(
|
|
||||||
Asm->getObjFileLowering().getDwarfDebugInlineSection());
|
|
||||||
|
|
||||||
Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
|
|
||||||
Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
|
|
||||||
Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
|
|
||||||
|
|
||||||
Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
|
|
||||||
|
|
||||||
Asm->OutStreamer.AddComment("Dwarf Version");
|
|
||||||
Asm->EmitInt16(DwarfVersion);
|
|
||||||
Asm->OutStreamer.AddComment("Address Size (in bytes)");
|
|
||||||
Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
|
|
||||||
|
|
||||||
for (SmallVectorImpl<const MDNode *>::iterator I = InlinedSPNodes.begin(),
|
|
||||||
E = InlinedSPNodes.end(); I != E; ++I) {
|
|
||||||
|
|
||||||
const MDNode *Node = *I;
|
|
||||||
InlineInfoMap::iterator II = InlineInfo.find(Node);
|
|
||||||
SmallVectorImpl<InlineInfoLabels> &Labels = II->second;
|
|
||||||
DISubprogram SP(Node);
|
|
||||||
StringRef LName = SP.getLinkageName();
|
|
||||||
StringRef Name = SP.getName();
|
|
||||||
|
|
||||||
Asm->OutStreamer.AddComment("MIPS linkage name");
|
|
||||||
if (LName.empty())
|
|
||||||
Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
|
|
||||||
DwarfStrSectionSym);
|
|
||||||
else
|
|
||||||
Asm->EmitSectionOffset(
|
|
||||||
InfoHolder.getStringPoolEntry(Function::getRealLinkageName(LName)),
|
|
||||||
DwarfStrSectionSym);
|
|
||||||
|
|
||||||
Asm->OutStreamer.AddComment("Function name");
|
|
||||||
Asm->EmitSectionOffset(InfoHolder.getStringPoolEntry(Name),
|
|
||||||
DwarfStrSectionSym);
|
|
||||||
Asm->EmitULEB128(Labels.size(), "Inline count");
|
|
||||||
|
|
||||||
for (SmallVectorImpl<InlineInfoLabels>::iterator LI = Labels.begin(),
|
|
||||||
LE = Labels.end(); LI != LE; ++LI) {
|
|
||||||
if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
|
|
||||||
Asm->EmitInt32(LI->second->getOffset());
|
|
||||||
|
|
||||||
if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
|
|
||||||
Asm->OutStreamer.EmitSymbolValue(LI->first,
|
|
||||||
Asm->getDataLayout().getPointerSize());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
// DWARF5 Experimental Separate Dwarf emitters.
|
// DWARF5 Experimental Separate Dwarf emitters.
|
||||||
|
|
||||||
// This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
|
// This DIE has the following attributes: DW_AT_comp_dir, DW_AT_stmt_list,
|
||||||
|
@@ -358,14 +358,6 @@ class DwarfDebug {
|
|||||||
// as DW_AT_inline.
|
// as DW_AT_inline.
|
||||||
SmallPtrSet<DIE *, 4> InlinedSubprogramDIEs;
|
SmallPtrSet<DIE *, 4> InlinedSubprogramDIEs;
|
||||||
|
|
||||||
// Keep track of inlined functions and their location. This
|
|
||||||
// information is used to populate the debug_inlined section.
|
|
||||||
typedef std::pair<const MCSymbol *, DIE *> InlineInfoLabels;
|
|
||||||
typedef DenseMap<const MDNode *,
|
|
||||||
SmallVector<InlineInfoLabels, 4> > InlineInfoMap;
|
|
||||||
InlineInfoMap InlineInfo;
|
|
||||||
SmallVector<const MDNode *, 4> InlinedSPNodes;
|
|
||||||
|
|
||||||
// This is a collection of subprogram MDNodes that are processed to
|
// This is a collection of subprogram MDNodes that are processed to
|
||||||
// create DIEs.
|
// create DIEs.
|
||||||
SmallPtrSet<const MDNode *, 16> ProcessedSPNodes;
|
SmallPtrSet<const MDNode *, 16> ProcessedSPNodes;
|
||||||
|
@@ -87,7 +87,6 @@ MCAsmInfo::MCAsmInfo() {
|
|||||||
HasLEB128 = false;
|
HasLEB128 = false;
|
||||||
SupportsDebugInformation = false;
|
SupportsDebugInformation = false;
|
||||||
ExceptionsType = ExceptionHandling::None;
|
ExceptionsType = ExceptionHandling::None;
|
||||||
DwarfUsesInlineInfoSection = false;
|
|
||||||
DwarfUsesRelocationsAcrossSections = true;
|
DwarfUsesRelocationsAcrossSections = true;
|
||||||
DwarfRegNumForCFI = false;
|
DwarfRegNumForCFI = false;
|
||||||
HasMicrosoftFastStdCallMangling = false;
|
HasMicrosoftFastStdCallMangling = false;
|
||||||
|
@@ -62,7 +62,6 @@ X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &T) {
|
|||||||
PCSymbol = ".";
|
PCSymbol = ".";
|
||||||
|
|
||||||
SupportsDebugInformation = true;
|
SupportsDebugInformation = true;
|
||||||
DwarfUsesInlineInfoSection = true;
|
|
||||||
UseDataRegionDirectives = MarkedJTDataRegions;
|
UseDataRegionDirectives = MarkedJTDataRegions;
|
||||||
|
|
||||||
// Exceptions handling
|
// Exceptions handling
|
||||||
|
Reference in New Issue
Block a user