diff options
Diffstat (limited to 'lib/MC/MCAssembler.cpp')
-rw-r--r-- | lib/MC/MCAssembler.cpp | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index 9dc67644b7..8e87d5b5ee 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -590,24 +590,14 @@ void MCAssembler::WriteSectionData(const MCSectionData *SD, void MCAssembler::AddSectionToTheEnd(const MCObjectWriter &Writer, MCSectionData &SD, MCAsmLayout &Layout) { // Create dummy fragments and assign section ordinals. - unsigned SectionIndex = 0; - for (MCAssembler::iterator it = begin(), ie = end(); it != ie; ++it) - SectionIndex++; - + unsigned SectionIndex = size(); SD.setOrdinal(SectionIndex); // Assign layout order indices to sections and fragments. - unsigned FragmentIndex = 0; - unsigned i = 0; - for (unsigned e = Layout.getSectionOrder().size(); i != e; ++i) { - MCSectionData *SD = Layout.getSectionOrder()[i]; - - for (MCSectionData::iterator it2 = SD->begin(), - ie2 = SD->end(); it2 != ie2; ++it2) - FragmentIndex++; - } + const MCFragment &Last = *Layout.getSectionOrder().back()->rbegin(); + unsigned FragmentIndex = Last.getLayoutOrder() + 1; - SD.setLayoutOrder(i); + SD.setLayoutOrder(Layout.getSectionOrder().size()); for (MCSectionData::iterator it2 = SD.begin(), ie2 = SD.end(); it2 != ie2; ++it2) { it2->setLayoutOrder(FragmentIndex++); @@ -615,11 +605,6 @@ void MCAssembler::AddSectionToTheEnd(const MCObjectWriter &Writer, Layout.getSectionOrder().push_back(&SD); Layout.LayoutSection(&SD); - - // Layout until everything fits. - while (LayoutOnce(Writer, Layout)) - continue; - } void MCAssembler::Finish(MCObjectWriter *Writer) { |