diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-05-14 00:37:14 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-05-14 00:37:14 +0000 |
commit | 337718e09c99349939a53643984c04f5dc118bb7 (patch) | |
tree | 056b9b30d229b68c54f7931207fa5201e1cd484b /lib/MC | |
parent | afc6acdab7ba3544d76329ab461f14a93cee67a2 (diff) | |
download | external_llvm-337718e09c99349939a53643984c04f5dc118bb7.zip external_llvm-337718e09c99349939a53643984c04f5dc118bb7.tar.gz external_llvm-337718e09c99349939a53643984c04f5dc118bb7.tar.bz2 |
MC: Switch MCFragment to storing the layout order index, not its index in the file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103751 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCAssembler.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index 57214af..47c8915 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -599,10 +599,6 @@ 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. @@ -627,10 +623,8 @@ void MCAssembler::Finish() { AF->setOnlyAlignAddress(true); } - // Assign section and fragment ordinals, all subsequent backend code is - // responsible for updating these in place. + // Create dummy fragments and assign section ordinals. unsigned SectionIndex = 0; - unsigned FragmentIndex = 0; for (MCAssembler::iterator it = begin(), ie = end(); it != ie; ++it) { // Create dummy fragments to eliminate any empty sections, this simplifies // layout. @@ -642,10 +636,17 @@ void MCAssembler::Finish() { } it->setOrdinal(SectionIndex++); + } - for (MCSectionData::iterator it2 = it->begin(), - ie2 = it->end(); it2 != ie2; ++it2) - it2->setOrdinal(FragmentIndex++); + // Assign layout order indices to sections and fragments. + unsigned FragmentIndex = 0; + for (unsigned i = 0, e = Layout.getSectionOrder().size(); i != e; ++i) { + MCSectionData *SD = Layout.getSectionOrder()[i]; + SD->setLayoutOrder(i); + + for (MCSectionData::iterator it2 = SD->begin(), + ie2 = SD->end(); it2 != ie2; ++it2) + it2->setLayoutOrder(FragmentIndex++); } // Layout until everything fits. @@ -827,7 +828,7 @@ void MCAssembler::FinishLayout(MCAsmLayout &Layout) { // Update the data fragments layout data. DF->setParent(IF->getParent()); DF->setAtom(IF->getAtom()); - DF->setOrdinal(IF->getOrdinal()); + DF->setLayoutOrder(IF->getLayoutOrder()); Layout.FragmentReplaced(IF, DF); // Copy in the data and the fixups. @@ -857,8 +858,8 @@ raw_ostream &operator<<(raw_ostream &OS, const MCAsmFixup &AF) { void MCFragment::dump() { raw_ostream &OS = llvm::errs(); - OS << "<MCFragment " << (void*) this << " Offset:" << Offset - << " EffectiveSize:" << EffectiveSize << ">"; + OS << "<MCFragment " << (void*) this << " LayoutOrder:" << LayoutOrder + << " Offset:" << Offset << " EffectiveSize:" << EffectiveSize << ">"; } void MCAlignFragment::dump() { |