[llvm] fadc722 - [MC] switchSectionNoPrint: update CurFrag
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 27 22:00:45 PDT 2024
Author: Fangrui Song
Date: 2024-06-27T22:00:40-07:00
New Revision: fadc72235ed59eba8538d803fba5c79cd9cda5e9
URL: https://github.com/llvm/llvm-project/commit/fadc72235ed59eba8538d803fba5c79cd9cda5e9
DIFF: https://github.com/llvm/llvm-project/commit/fadc72235ed59eba8538d803fba5c79cd9cda5e9.diff
LOG: [MC] switchSectionNoPrint: update CurFrag
To ensure that CurFrag->Parent and SectionStack.back() are in sync.
Added:
Modified:
llvm/include/llvm/MC/MCObjectStreamer.h
llvm/include/llvm/MC/MCStreamer.h
llvm/lib/MC/MCAsmStreamer.cpp
llvm/lib/MC/MCObjectStreamer.cpp
llvm/lib/MC/MCStreamer.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCObjectStreamer.h b/llvm/include/llvm/MC/MCObjectStreamer.h
index e6c07d50baedb..df50ad0ae84f3 100644
--- a/llvm/include/llvm/MC/MCObjectStreamer.h
+++ b/llvm/include/llvm/MC/MCObjectStreamer.h
@@ -125,6 +125,7 @@ class MCObjectStreamer : public MCStreamer {
void emitSLEB128Value(const MCExpr *Value) override;
void emitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
void changeSection(MCSection *Section, uint32_t Subsection = 0) override;
+ void switchSectionNoPrint(MCSection *Section) override;
void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override;
/// Emit an instruction to a special fragment, because this instruction
diff --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h
index 20328a41cfbd8..a42f0ec55ff7c 100644
--- a/llvm/include/llvm/MC/MCStreamer.h
+++ b/llvm/include/llvm/MC/MCStreamer.h
@@ -433,15 +433,8 @@ class MCStreamer {
virtual void switchSection(MCSection *Section, uint32_t Subsec = 0);
bool switchSection(MCSection *Section, const MCExpr *);
- /// Set the current section where code is being emitted to \p Section.
- /// This is required to update CurSection. This version does not call
- /// changeSection.
- void switchSectionNoChange(MCSection *Section) {
- assert(Section && "Cannot switch to a null section!");
- MCSectionSubPair curSection = SectionStack.back().first;
- SectionStack.back().second = curSection;
- SectionStack.back().first = MCSectionSubPair(Section, 0);
- }
+ /// Similar to switchSection, but does not print the section directive.
+ virtual void switchSectionNoPrint(MCSection *Section);
/// Create the default sections and set the initial one.
virtual void initSections(bool NoExecStack, const MCSubtargetInfo &STI);
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index ff240d1652db1..31994e5247b9d 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -2209,7 +2209,7 @@ void MCAsmStreamer::emitWinEHHandlerData(SMLoc Loc) {
MCSection *TextSec = &CurFrame->Function->getSection();
MCSection *XData = getAssociatedXDataSection(TextSec);
- switchSectionNoChange(XData);
+ switchSectionNoPrint(XData);
OS << "\t.seh_handlerdata";
EmitEOL();
@@ -2626,7 +2626,7 @@ void MCAsmStreamer::doFinalizationAtSectionEnd(MCSection *Section) {
if (MAI->usesDwarfFileAndLocDirectives())
return;
- switchSectionNoChange(Section);
+ switchSectionNoPrint(Section);
MCSymbol *Sym = getCurrentSectionOnly()->getEndSymbol(getContext());
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp
index b8ed1d6f7b216..6dddaa427a97d 100644
--- a/llvm/lib/MC/MCObjectStreamer.cpp
+++ b/llvm/lib/MC/MCObjectStreamer.cpp
@@ -313,6 +313,11 @@ bool MCObjectStreamer::changeSectionImpl(MCSection *Section,
return getAssembler().registerSection(*Section);
}
+void MCObjectStreamer::switchSectionNoPrint(MCSection *Section) {
+ MCStreamer::switchSectionNoPrint(Section);
+ changeSection(Section, 0);
+}
+
void MCObjectStreamer::emitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
getAssembler().registerSymbol(*Symbol);
MCStreamer::emitAssignment(Symbol, Value);
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index cfc27be3feec3..c0879fd3a698c 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -1290,6 +1290,12 @@ bool MCStreamer::switchSection(MCSection *Section, const MCExpr *SubsecExpr) {
return false;
}
+void MCStreamer::switchSectionNoPrint(MCSection *Section) {
+ SectionStack.back().second = SectionStack.back().first;
+ SectionStack.back().first = MCSectionSubPair(Section, 0);
+ CurFrag = &Section->getDummyFragment();
+}
+
MCSymbol *MCStreamer::endSection(MCSection *Section) {
// TODO: keep track of the last subsection so that this symbol appears in the
// correct place.
More information about the llvm-commits
mailing list