-void MCAsmLayout::ReplaceFragment(MCFragment *Src, MCFragment *Dst) {
- MCSectionData *SD = Src->getParent();
-
- // Insert Dst immediately before Src
- SD->getFragmentList().insert(Src, Dst);
-
- // Set the data fragment's layout data.
- Dst->setParent(Src->getParent());
- Dst->setAtom(Src->getAtom());
- Dst->setLayoutOrder(Src->getLayoutOrder());
-
- if (LastValidFragment == Src)
- LastValidFragment = Dst;
-
- Dst->Offset = Src->Offset;
- Dst->EffectiveSize = Src->EffectiveSize;
-
- // Remove Src, but don't delete it yet.
- SD->getFragmentList().remove(Src);
-}
-
-void MCAsmLayout::CoalesceFragments(MCFragment *Src, MCFragment *Dst) {
- assert(Src->getPrevNode() == Dst);
-
- if (isFragmentUpToDate(Src)) {
- if (LastValidFragment == Src)
- LastValidFragment = Dst;
- Dst->EffectiveSize += Src->EffectiveSize;
- } else {
- // We don't know the effective size of Src, so we have to invalidate Dst.
- Invalidate(Dst);
- }
- // Remove Src, but don't delete it yet.
- Src->getParent()->getFragmentList().remove(Src);
-}
-
-uint64_t MCAsmLayout::getFragmentAddress(const MCFragment *F) const {
- assert(F->getParent() && "Missing section()!");
- return getSectionAddress(F->getParent()) + getFragmentOffset(F);
-}
-
-uint64_t MCAsmLayout::getFragmentEffectiveSize(const MCFragment *F) const {
- EnsureValid(F);
- assert(F->EffectiveSize != ~UINT64_C(0) && "Address not set!");
- return F->EffectiveSize;
-}
-