diff options
-rw-r--r-- | include/llvm/MC/MCAssembler.h | 6 | ||||
-rw-r--r-- | lib/MC/MCAssembler.cpp | 4 |
2 files changed, 10 insertions, 0 deletions
diff --git a/include/llvm/MC/MCAssembler.h b/include/llvm/MC/MCAssembler.h index 33fa295..095b174 100644 --- a/include/llvm/MC/MCAssembler.h +++ b/include/llvm/MC/MCAssembler.h @@ -392,6 +392,9 @@ private: /// Ordinal - The section index in the assemblers section list. unsigned Ordinal; + /// LayoutOrder - The index of this section in the layout order. + unsigned LayoutOrder; + /// Alignment - The maximum alignment seen in this section. unsigned Alignment; @@ -426,6 +429,9 @@ public: unsigned getOrdinal() const { return Ordinal; } void setOrdinal(unsigned Value) { Ordinal = Value; } + unsigned getLayoutOrder() const { return LayoutOrder; } + void setLayoutOrder(unsigned Value) { LayoutOrder = Value; } + /// @name Fragment Access /// @{ diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index ac91bad..f41b25f 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -601,6 +601,10 @@ void MCAssembler::Finish() { // Create the layout object. MCAsmLayout Layout(*this); + // Assign layout order indices. + for (unsigned i = 0, e = Layout.getSectionOrder().size(); i != e; ++i) + Layout.getSectionOrder()[i]->setLayoutOrder(i); + // Insert additional align fragments for concrete sections to explicitly pad // the previous section to match their alignment requirements. This is for // 'gas' compatibility, it shouldn't strictly be necessary. |