diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-05-13 08:43:31 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-05-13 08:43:31 +0000 |
commit | aa0d350fe54b0bf13947cdb08d8e76e4ec233d6f (patch) | |
tree | 4985cb8ccea2d767f3f9d0a5d64e984de3ce7a44 | |
parent | 93ca7b60bf55c58f0e47cefd5ecccd12c0637784 (diff) |
MC: Add MCAsmLayout::FragmentReplaced() helper function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103709 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/MC/MCAsmLayout.h | 3 | ||||
-rw-r--r-- | lib/MC/MCAssembler.cpp | 10 |
2 files changed, 9 insertions, 4 deletions
diff --git a/include/llvm/MC/MCAsmLayout.h b/include/llvm/MC/MCAsmLayout.h index 8a38247002..f866aab95b 100644 --- a/include/llvm/MC/MCAsmLayout.h +++ b/include/llvm/MC/MCAsmLayout.h @@ -47,6 +47,9 @@ public: /// the delta from the old size. void UpdateForSlide(MCFragment *F, int SlideAmount); + /// \brief Update the layout because a fragment has been replaced. + void FragmentReplaced(MCFragment *Src, MCFragment *Dst); + /// @name Section Access (in layout order) /// @{ diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index e62296f35d..de36c52c68 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -73,6 +73,11 @@ void MCAsmLayout::UpdateForSlide(MCFragment *F, int SlideAmount) { getAssembler().LayoutSection(*this, i); } +void MCAsmLayout::FragmentReplaced(MCFragment *Src, MCFragment *Dst) { + Dst->Offset = Src->Offset; + Dst->EffectiveSize = Src->EffectiveSize; +} + uint64_t MCAsmLayout::getFragmentAddress(const MCFragment *F) const { assert(F->getParent() && "Missing section()!"); return getSectionAddress(F->getParent()) + getFragmentOffset(F); @@ -818,13 +823,10 @@ void MCAssembler::FinishLayout(MCAsmLayout &Layout) { SD.getFragmentList().insert(it2, DF); // Update the data fragments layout data. - // - // FIXME: Add MCAsmLayout utility for this. DF->setParent(IF->getParent()); DF->setAtom(IF->getAtom()); DF->setOrdinal(IF->getOrdinal()); - Layout.setFragmentOffset(DF, Layout.getFragmentOffset(IF)); - Layout.setFragmentEffectiveSize(DF, Layout.getFragmentEffectiveSize(IF)); + Layout.FragmentReplaced(IF, DF); // Copy in the data and the fixups. DF->getContents().append(IF->getCode().begin(), IF->getCode().end()); |