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
This commit is contained in:
Daniel Dunbar 2010-05-13 08:43:37 +00:00
parent 09d3465f0e
commit 49ed921190

View File

@ -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;