[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