[llvm] r199971 - Simplify the logic for deciding when to initialize the sections.
Eric Christopher
echristo at gmail.com
Tue Mar 4 18:30:32 PST 2014
Hi Rafael,
This ended up causing PR19049 since we don't have a valid section when
we go to push the first time and so we have a null section when trying
to pop and switch back.
I see we have a couple of choices here:
a) Go back to starting with the text section.
b) Special case pushsection when we don't have a current initialized section
c) Add a special "switch to nothing" section
I'm inclined toward a) at the moment since it seems least surprise,
but I thought I'd bring it up.
-eric
On Thu, Jan 23, 2014 at 7:54 PM, Rafael Espindola
<rafael.espindola at gmail.com> wrote:
> Author: rafael
> Date: Thu Jan 23 21:54:40 2014
> New Revision: 199971
>
> URL: http://llvm.org/viewvc/llvm-project?rev=199971&view=rev
> Log:
> Simplify the logic for deciding when to initialize the sections.
>
> Modified:
> llvm/trunk/include/llvm/MC/MCELFStreamer.h
> llvm/trunk/include/llvm/MC/MCStreamer.h
> llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
> llvm/trunk/lib/MC/MCAsmStreamer.cpp
> llvm/trunk/lib/MC/MCELFStreamer.cpp
> llvm/trunk/lib/MC/MCStreamer.cpp
> llvm/trunk/lib/MC/WinCOFFStreamer.cpp
>
> Modified: llvm/trunk/include/llvm/MC/MCELFStreamer.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCELFStreamer.h?rev=199971&r1=199970&r2=199971&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCELFStreamer.h (original)
> +++ llvm/trunk/include/llvm/MC/MCELFStreamer.h Thu Jan 23 21:54:40 2014
> @@ -45,7 +45,7 @@ public:
> /// @name MCStreamer Interface
> /// @{
>
> - virtual void InitSections();
> + virtual void InitSections(bool Force);
> virtual void ChangeSection(const MCSection *Section,
> const MCExpr *Subsection);
> virtual void EmitLabel(MCSymbol *Symbol);
>
> Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=199971&r1=199970&r2=199971&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
> +++ llvm/trunk/include/llvm/MC/MCStreamer.h Thu Jan 23 21:54:40 2014
> @@ -157,8 +157,6 @@ class MCStreamer {
> /// values saved by PushSection.
> SmallVector<std::pair<MCSectionSubPair, MCSectionSubPair>, 4> SectionStack;
>
> - bool AutoInitSections;
> -
> protected:
> MCStreamer(MCContext &Ctx, MCTargetStreamer *TargetStreamer);
>
> @@ -330,19 +328,11 @@ public:
> SectionStack.back().first = MCSectionSubPair(Section, Subsection);
> }
>
> - /// Initialize the streamer.
> - void InitStreamer() {
> - if (AutoInitSections)
> - InitSections();
> - }
> -
> - /// Tell this MCStreamer to call InitSections upon initialization.
> - void setAutoInitSections(bool AutoInitSections) {
> - this->AutoInitSections = AutoInitSections;
> - }
> -
> - /// InitSections - Create the default sections and set the initial one.
> - virtual void InitSections();
> + /// Create the default sections and set the initial one.
> + ///
> + /// @param Force - If false, a text streamer implementation can be a nop.
> + /// Used by CodeGen to avoid starting every file with '.text'.
> + virtual void InitSections(bool Force = true);
>
> /// AssignSection - Sets the symbol's section.
> ///
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=199971&r1=199970&r2=199971&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Thu Jan 23 21:54:40 2014
> @@ -163,7 +163,7 @@ bool AsmPrinter::doInitialization(Module
> const_cast<TargetLoweringObjectFile&>(getObjFileLowering())
> .Initialize(OutContext, TM);
>
> - OutStreamer.InitStreamer();
> + OutStreamer.InitSections(false);
>
> Mang = new Mangler(TM.getDataLayout());
>
>
> Modified: llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=199971&r1=199970&r2=199971&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp (original)
> +++ llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp Thu Jan 23 21:54:40 2014
> @@ -208,7 +208,6 @@ bool LLVMTargetMachine::addPassesToEmitF
> *Context, *MAB, Out,
> MCE, hasMCRelaxAll(),
> hasMCNoExecStack()));
> - AsmStreamer.get()->setAutoInitSections(true);
> break;
> }
> case CGFT_Null:
>
> Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=199971&r1=199970&r2=199971&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Thu Jan 23 21:54:40 2014
> @@ -128,6 +128,11 @@ public:
> virtual void ChangeSection(const MCSection *Section,
> const MCExpr *Subsection);
>
> + virtual void InitSections(bool Force) {
> + if (Force)
> + SwitchSection(getContext().getObjectFileInfo()->getTextSection());
> + }
> +
> virtual void EmitLabel(MCSymbol *Symbol);
> virtual void EmitDebugLabel(MCSymbol *Symbol);
>
>
> Modified: llvm/trunk/lib/MC/MCELFStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCELFStreamer.cpp?rev=199971&r1=199970&r2=199971&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCELFStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCELFStreamer.cpp Thu Jan 23 21:54:40 2014
> @@ -38,7 +38,7 @@ using namespace llvm;
> MCELFStreamer::~MCELFStreamer() {
> }
>
> -void MCELFStreamer::InitSections() {
> +void MCELFStreamer::InitSections(bool Force) {
> // This emulates the same behavior of GNU as. This makes it easier
> // to compare the output as the major sections are in the same order.
> SwitchSection(getContext().getObjectFileInfo()->getTextSection());
>
> Modified: llvm/trunk/lib/MC/MCStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCStreamer.cpp?rev=199971&r1=199970&r2=199971&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCStreamer.cpp Thu Jan 23 21:54:40 2014
> @@ -29,8 +29,7 @@ void MCTargetStreamer::emitLabel(MCSymbo
>
> MCStreamer::MCStreamer(MCContext &Ctx, MCTargetStreamer *TargetStreamer)
> : Context(Ctx), TargetStreamer(TargetStreamer), EmitEHFrame(true),
> - EmitDebugFrame(false), CurrentW64UnwindInfo(0), LastSymbol(0),
> - AutoInitSections(false) {
> + EmitDebugFrame(false), CurrentW64UnwindInfo(0), LastSymbol(0) {
> SectionStack.push_back(std::pair<MCSectionSubPair, MCSectionSubPair>());
> if (TargetStreamer)
> TargetStreamer->setStreamer(this);
> @@ -201,7 +200,7 @@ void MCStreamer::EmitEHSymAttributes(con
> MCSymbol *EHSymbol) {
> }
>
> -void MCStreamer::InitSections() {
> +void MCStreamer::InitSections(bool Force) {
> SwitchSection(getContext().getObjectFileInfo()->getTextSection());
> }
>
>
> Modified: llvm/trunk/lib/MC/WinCOFFStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFStreamer.cpp?rev=199971&r1=199970&r2=199971&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/WinCOFFStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/WinCOFFStreamer.cpp Thu Jan 23 21:54:40 2014
> @@ -50,7 +50,7 @@ public:
>
> // MCStreamer interface
>
> - virtual void InitSections();
> + virtual void InitSections(bool Force);
> virtual void EmitLabel(MCSymbol *Symbol);
> virtual void EmitDebugLabel(MCSymbol *Symbol);
> virtual void EmitAssemblerFlag(MCAssemblerFlag Flag);
> @@ -123,7 +123,7 @@ void WinCOFFStreamer::AddCommonSymbol(MC
>
> // MCStreamer interface
>
> -void WinCOFFStreamer::InitSections() {
> +void WinCOFFStreamer::InitSections(bool Force) {
> // FIXME: this is identical to the ELF one.
> // This emulates the same behavior of GNU as. This makes it easier
> // to compare the output as the major sections are in the same order.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list