From: Daniel Dunbar Date: Thu, 13 May 2010 08:43:37 +0000 (+0000) Subject: MC: Move ordinal calculation, to make sure fragments synthesized for layout get assig... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=49ed9211905ec586f1d23a7f337d335ae63b4635;p=oota-llvm.git MC: Move ordinal calculation, to make sure fragments synthesized for layout get assigned ordinals properly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103711 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index 291ae85895b..ac91bad8ac8 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -598,27 +598,6 @@ void MCAssembler::Finish() { llvm::errs() << "assembler backend - pre-layout\n--\n"; dump(); }); - // Assign section and fragment ordinals, all subsequent backend code is - // responsible for updating these in place. - 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. - if (it->getFragmentList().empty()) { - unsigned ValueSize = 1; - if (getBackend().isVirtualSection(it->getSection())) - ValueSize = 1; - new MCFillFragment(0, 1, 0, it); - } - - it->setOrdinal(SectionIndex++); - - for (MCSectionData::iterator it2 = it->begin(), - ie2 = it->end(); it2 != ie2; ++it2) - it2->setOrdinal(FragmentIndex++); - } - // Create the layout object. MCAsmLayout Layout(*this); @@ -646,6 +625,27 @@ void MCAssembler::Finish() { AF->setOnlyAlignAddress(true); } + // Assign section and fragment ordinals, all subsequent backend code is + // responsible for updating these in place. + 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. + if (it->getFragmentList().empty()) { + unsigned ValueSize = 1; + if (getBackend().isVirtualSection(it->getSection())) + ValueSize = 1; + new MCFillFragment(0, 1, 0, it); + } + + it->setOrdinal(SectionIndex++); + + for (MCSectionData::iterator it2 = it->begin(), + ie2 = it->end(); it2 != ie2; ++it2) + it2->setOrdinal(FragmentIndex++); + } + // Layout until everything fits. while (LayoutOnce(Layout)) continue;