FT_Data,
FT_Fill,
FT_Inst,
- FT_Org,
- FT_ZeroFill
+ FT_Org
};
private:
virtual void dump();
};
-/// MCZeroFillFragment - Represent data which has a fixed size and alignment,
-/// but requires no physical space in the object file.
-class MCZeroFillFragment : public MCFragment {
- /// Size - The size of this fragment.
- uint64_t Size;
-
-public:
- MCZeroFillFragment(uint64_t _Size, MCSectionData *SD = 0)
- : MCFragment(FT_ZeroFill, SD), Size(_Size) {}
-
- /// @name Accessors
- /// @{
-
- uint64_t getSize() const { return Size; }
-
- /// @}
-
- static bool classof(const MCFragment *F) {
- return F->getKind() == MCFragment::FT_ZeroFill;
- }
- static bool classof(const MCZeroFillFragment *) { return true; }
-
- virtual void dump();
-};
-
// FIXME: Should this be a separate class, or just merged into MCSection? Since
// we anticipate the fast path being through an MCAssembler, the only reason to
// keep it out is for API abstraction.
break;
case MCFragment::FT_Fill: {
- MCFillFragment &FF = cast<MCFillFragment>(F);
- EffectiveSize = FF.getSize();
+ EffectiveSize = cast<MCFillFragment>(F).getSize();
break;
}
EffectiveSize = Offset;
break;
}
-
- case MCFragment::FT_ZeroFill: {
- EffectiveSize = cast<MCZeroFillFragment>(F).getSize();
- break;
- }
}
Layout.setFragmentEffectiveSize(&F, EffectiveSize);
break;
}
-
- case MCFragment::FT_ZeroFill: {
- assert(0 && "Invalid zero fill fragment in concrete section!");
- break;
- }
}
assert(OW->getStream().tell() - Start == FragmentSize);
assert(!cast<MCFillFragment>(it)->getValueSize() &&
"Invalid fill in virtual section!");
break;
- case MCFragment::FT_ZeroFill:
- break;
}
}
OS << " Offset:" << getOffset() << " Value:" << getValue() << ">";
}
-void MCZeroFillFragment::dump() {
- raw_ostream &OS = llvm::errs();
-
- OS << "<MCZeroFillFragment ";
- this->MCFragment::dump();
- OS << "\n ";
- OS << " Size:" << getSize() << ">";
-}
-
void MCSectionData::dump() {
raw_ostream &OS = llvm::errs();
new MCAlignFragment(ByteAlignment, 0, 0, ByteAlignment, /*EmitNops=*/false,
&SectData);
- MCFragment *F = new MCZeroFillFragment(Size, &SectData);
+ MCFragment *F = new MCFillFragment(0, 0, Size, &SectData);
SD.setFragment(F);
if (Assembler.isSymbolLinkerVisible(&SD))
F->setAtom(&SD);