diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-03-25 07:10:11 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-03-25 07:10:11 +0000 |
commit | 5a6e97a7e4e25265cd491f10cc9b0676ff5c0746 (patch) | |
tree | 4599ecc64c023d2d8020d379bec941255ab37814 /lib/MC/MCAssembler.cpp | |
parent | b026d64bf23c3b5c4df7b15185303ec6e7470387 (diff) |
MC: Explicity track section and fragment ordinals.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99500 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCAssembler.cpp')
-rw-r--r-- | lib/MC/MCAssembler.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index 8efc78c1f9..5190239f5a 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -568,6 +568,18 @@ 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) { + it->setOrdinal(SectionIndex++); + + for (MCSectionData::iterator it2 = it->begin(), + ie2 = it->end(); it2 != ie2; ++it2) + it2->setOrdinal(FragmentIndex++); + } + // Layout until everything fits. MCAsmLayout Layout(*this); while (LayoutOnce(Layout)) @@ -781,6 +793,7 @@ void MCAssembler::FinishLayout(MCAsmLayout &Layout) { // // FIXME: Add MCAsmLayout utility for this. DF->setParent(IF->getParent()); + DF->setOrdinal(IF->getOrdinal()); Layout.setFragmentOffset(DF, Layout.getFragmentOffset(IF)); Layout.setFragmentEffectiveSize(DF, Layout.getFragmentEffectiveSize(IF)); |