Remove yet another method of creating begin and end symbol for sections.

I missed this one when first unifying how we handle begin and end symbols.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237912 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2015-05-21 16:52:32 +00:00
parent dc089e4dc3
commit 43356a1a45
6 changed files with 36 additions and 49 deletions

View File

@ -136,10 +136,8 @@ namespace llvm {
/// assembly source files.
unsigned GenDwarfFileNumber;
/// Symbols created for the start and end of each section, used for
/// generating the .debug_ranges and .debug_aranges sections.
MapVector<const MCSection *, std::pair<MCSymbol *, MCSymbol *>>
SectionStartEndSyms;
/// Sections for generating the .debug_ranges and .debug_aranges sections.
SetVector<const MCSection *> SectionsForRanges;
/// The information gathered from labels that will have dwarf label
/// entries when generating dwarf assembly source files.
@ -469,17 +467,13 @@ namespace llvm {
void setGenDwarfFileNumber(unsigned FileNumber) {
GenDwarfFileNumber = FileNumber;
}
const MapVector<const MCSection *, std::pair<MCSymbol *, MCSymbol *>> &
getGenDwarfSectionSyms() {
return SectionStartEndSyms;
const SetVector<const MCSection *> &getGenDwarfSectionSyms() {
return SectionsForRanges;
}
std::pair<MapVector<const MCSection *,
std::pair<MCSymbol *, MCSymbol *>>::iterator,
bool>
addGenDwarfSection(const MCSection *Sec) {
return SectionStartEndSyms.insert(
std::make_pair(Sec, std::make_pair(nullptr, nullptr)));
bool addGenDwarfSection(const MCSection *Sec) {
return SectionsForRanges.insert(Sec);
}
void finalizeDwarfSections(MCStreamer &MCOS);
const std::vector<MCGenDwarfLabelEntry> &getMCGenDwarfLabelEntries() const {
return MCGenDwarfLabelEntries;

View File

@ -35,7 +35,7 @@ private:
MCSection(const MCSection &) = delete;
void operator=(const MCSection &) = delete;
MCSymbol *Begin;
mutable MCSymbol *Begin;
mutable MCSymbol *End;
protected:
@ -52,6 +52,10 @@ public:
SectionVariant getVariant() const { return Variant; }
MCSymbol *getBeginSymbol() const { return Begin; }
void setBeginSymbol(MCSymbol *Sym) const {
assert(!Begin);
Begin = Sym;
}
MCSymbol *getEndSymbol(MCContext &Ctx) const;
bool hasEnded() const;

View File

@ -77,7 +77,7 @@ void MCContext::reset() {
CompilationDir.clear();
MainFileName.clear();
MCDwarfLineTablesCUMap.clear();
SectionStartEndSyms.clear();
SectionsForRanges.clear();
MCGenDwarfLabelEntries.clear();
DwarfDebugFlags = StringRef();
DwarfCompileUnitID = 0;
@ -437,27 +437,17 @@ bool MCContext::isValidDwarfFileNumber(unsigned FileNumber, unsigned CUID) {
return !MCDwarfFiles[FileNumber].Name.empty();
}
/// finalizeDwarfSections - Emit end symbols for each non-empty code section.
/// Also remove empty sections from SectionStartEndSyms, to avoid generating
/// Remove empty sections from SectionStartEndSyms, to avoid generating
/// useless debug info for them.
void MCContext::finalizeDwarfSections(MCStreamer &MCOS) {
MCContext &context = MCOS.getContext();
auto sec = SectionStartEndSyms.begin();
while (sec != SectionStartEndSyms.end()) {
assert(sec->second.first && "Start symbol must be set by now");
MCOS.SwitchSection(sec->first);
if (MCOS.mayHaveInstructions()) {
MCSymbol *SectionEndSym = context.createTempSymbol();
MCOS.EmitLabel(SectionEndSym);
sec->second.second = SectionEndSym;
++sec;
} else {
MapVector<const MCSection *, std::pair<MCSymbol *, MCSymbol *>>::iterator
to_erase = sec;
sec = SectionStartEndSyms.erase(to_erase);
}
std::vector<const MCSection *> Keep;
for (const MCSection *Sec : SectionsForRanges) {
MCOS.SwitchSection(Sec); // FIXME: pass the section to mayHaveInstructions
if (MCOS.mayHaveInstructions())
Keep.push_back(Sec);
}
SectionsForRanges.clear();
SectionsForRanges.insert(Keep.begin(), Keep.end());
}
void MCContext::reportFatalError(SMLoc Loc, const Twine &Msg) const {

View File

@ -610,9 +610,9 @@ static void EmitGenDwarfAranges(MCStreamer *MCOS,
// Now emit the table of pairs of PointerSize'ed values for the section
// addresses and sizes.
for (const auto &sec : Sections) {
MCSymbol *StartSymbol = sec.second.first;
MCSymbol *EndSymbol = sec.second.second;
for (const MCSection *Sec : Sections) {
MCSymbol *StartSymbol = Sec->getBeginSymbol();
MCSymbol *EndSymbol = Sec->getEndSymbol(context);
assert(StartSymbol && "StartSymbol must not be NULL");
assert(EndSymbol && "EndSymbol must not be NULL");
@ -699,8 +699,8 @@ static void EmitGenDwarfInfo(MCStreamer *MCOS,
const auto TextSection = Sections.begin();
assert(TextSection != Sections.end() && "No text section found");
MCSymbol *StartSymbol = TextSection->second.first;
MCSymbol *EndSymbol = TextSection->second.second;
MCSymbol *StartSymbol = (*TextSection)->getBeginSymbol();
MCSymbol *EndSymbol = (*TextSection)->getEndSymbol(context);
assert(StartSymbol && "StartSymbol must not be NULL");
assert(EndSymbol && "EndSymbol must not be NULL");
@ -805,10 +805,9 @@ static void EmitGenDwarfRanges(MCStreamer *MCOS) {
MCOS->SwitchSection(context.getObjectFileInfo()->getDwarfRangesSection());
for (const auto &sec : Sections) {
MCSymbol *StartSymbol = sec.second.first;
MCSymbol *EndSymbol = sec.second.second;
for (const MCSection *Sec : Sections) {
MCSymbol *StartSymbol = Sec->getBeginSymbol();
MCSymbol *EndSymbol = Sec->getEndSymbol(context);
assert(StartSymbol && "StartSymbol must not be NULL");
assert(EndSymbol && "EndSymbol must not be NULL");

View File

@ -632,10 +632,10 @@ bool AsmParser::Run(bool NoInitialTextSection, bool NoFinalize) {
if (getContext().getGenDwarfForAssembly()) {
MCSymbol *SectionStartSym = getContext().createTempSymbol();
getStreamer().EmitLabel(SectionStartSym);
auto InsertResult = getContext().addGenDwarfSection(
getStreamer().getCurrentSection().first);
assert(InsertResult.second && ".text section should not have debug info yet");
InsertResult.first->second.first = SectionStartSym;
const MCSection *Sec = getStreamer().getCurrentSection().first;
bool InsertResult = getContext().addGenDwarfSection(Sec);
assert(InsertResult && ".text section should not have debug info yet");
Sec->setBeginSymbol(SectionStartSym);
getContext().setGenDwarfFileNumber(getStreamer().EmitDwarfFileDirective(
0, StringRef(), getContext().getMainFileName()));
}

View File

@ -532,14 +532,14 @@ EndStmt:
getStreamer().SwitchSection(ELFSection, Subsection);
if (getContext().getGenDwarfForAssembly()) {
auto InsertResult = getContext().addGenDwarfSection(ELFSection);
if (InsertResult.second) {
bool InsertResult = getContext().addGenDwarfSection(ELFSection);
if (InsertResult) {
if (getContext().getDwarfVersion() <= 2)
Warning(loc, "DWARF2 only supports one section per compilation unit");
MCSymbol *SectionStartSymbol = getContext().createTempSymbol();
getStreamer().EmitLabel(SectionStartSymbol);
InsertResult.first->second.first = SectionStartSymbol;
ELFSection->setBeginSymbol(SectionStartSymbol);
}
}