[llvm] r237912 - Remove yet another method of creating begin and end symbol for sections.
Rafael Espindola
rafael.espindola at gmail.com
Thu May 21 09:52:32 PDT 2015
Author: rafael
Date: Thu May 21 11:52:32 2015
New Revision: 237912
URL: http://llvm.org/viewvc/llvm-project?rev=237912&view=rev
Log:
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.
Modified:
llvm/trunk/include/llvm/MC/MCContext.h
llvm/trunk/include/llvm/MC/MCSection.h
llvm/trunk/lib/MC/MCContext.cpp
llvm/trunk/lib/MC/MCDwarf.cpp
llvm/trunk/lib/MC/MCParser/AsmParser.cpp
llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
Modified: llvm/trunk/include/llvm/MC/MCContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=237912&r1=237911&r2=237912&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCContext.h (original)
+++ llvm/trunk/include/llvm/MC/MCContext.h Thu May 21 11:52:32 2015
@@ -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;
- }
- 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)));
+ const SetVector<const MCSection *> &getGenDwarfSectionSyms() {
+ return SectionsForRanges;
}
+ bool addGenDwarfSection(const MCSection *Sec) {
+ return SectionsForRanges.insert(Sec);
+ }
+
void finalizeDwarfSections(MCStreamer &MCOS);
const std::vector<MCGenDwarfLabelEntry> &getMCGenDwarfLabelEntries() const {
return MCGenDwarfLabelEntries;
Modified: llvm/trunk/include/llvm/MC/MCSection.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCSection.h?rev=237912&r1=237911&r2=237912&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCSection.h (original)
+++ llvm/trunk/include/llvm/MC/MCSection.h Thu May 21 11:52:32 2015
@@ -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;
Modified: llvm/trunk/lib/MC/MCContext.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=237912&r1=237911&r2=237912&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCContext.cpp (original)
+++ llvm/trunk/lib/MC/MCContext.cpp Thu May 21 11:52:32 2015
@@ -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(u
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 {
Modified: llvm/trunk/lib/MC/MCDwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=237912&r1=237911&r2=237912&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDwarf.cpp (original)
+++ llvm/trunk/lib/MC/MCDwarf.cpp Thu May 21 11:52:32 2015
@@ -610,9 +610,9 @@ static void EmitGenDwarfAranges(MCStream
// 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
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(MCStreame
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");
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=237912&r1=237911&r2=237912&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Thu May 21 11:52:32 2015
@@ -632,10 +632,10 @@ bool AsmParser::Run(bool NoInitialTextSe
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()));
}
Modified: llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp?rev=237912&r1=237911&r2=237912&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp Thu May 21 11:52:32 2015
@@ -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);
}
}
More information about the llvm-commits
mailing list