mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-07 11:33:44 +00:00
MC: Drop support for alignment in ZeroFill fragment, we can just use
MCAlignFragments for this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103661 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2745f6e920
commit
e73d49eda2
@ -359,21 +359,15 @@ class MCZeroFillFragment : public MCFragment {
|
|||||||
/// Size - The size of this fragment.
|
/// Size - The size of this fragment.
|
||||||
uint64_t Size;
|
uint64_t Size;
|
||||||
|
|
||||||
/// Alignment - The alignment for this fragment.
|
|
||||||
unsigned Alignment;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MCZeroFillFragment(uint64_t _Size, unsigned _Alignment, MCSectionData *SD = 0)
|
MCZeroFillFragment(uint64_t _Size, MCSectionData *SD = 0)
|
||||||
: MCFragment(FT_ZeroFill, SD),
|
: MCFragment(FT_ZeroFill, SD), Size(_Size) {}
|
||||||
Size(_Size), Alignment(_Alignment) {}
|
|
||||||
|
|
||||||
/// @name Accessors
|
/// @name Accessors
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
uint64_t getSize() const { return Size; }
|
uint64_t getSize() const { return Size; }
|
||||||
|
|
||||||
unsigned getAlignment() const { return Alignment; }
|
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
static bool classof(const MCFragment *F) {
|
static bool classof(const MCFragment *F) {
|
||||||
|
@ -421,16 +421,7 @@ void MCAssembler::LayoutFragment(MCAsmLayout &Layout, MCFragment &F) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case MCFragment::FT_ZeroFill: {
|
case MCFragment::FT_ZeroFill: {
|
||||||
MCZeroFillFragment &ZFF = cast<MCZeroFillFragment>(F);
|
EffectiveSize = cast<MCZeroFillFragment>(F).getSize();
|
||||||
|
|
||||||
// Align the fragment offset; it is safe to adjust the offset freely since
|
|
||||||
// this is only in virtual sections.
|
|
||||||
//
|
|
||||||
// FIXME: We shouldn't be doing this here.
|
|
||||||
Address = RoundUpToAlignment(Address, ZFF.getAlignment());
|
|
||||||
Layout.setFragmentOffset(&F, Address - StartAddress);
|
|
||||||
|
|
||||||
EffectiveSize = ZFF.getSize();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -498,6 +489,8 @@ static void WriteFragmentData(const MCAssembler &Asm, const MCAsmLayout &Layout,
|
|||||||
MCAlignFragment &AF = cast<MCAlignFragment>(F);
|
MCAlignFragment &AF = cast<MCAlignFragment>(F);
|
||||||
uint64_t Count = FragmentSize / AF.getValueSize();
|
uint64_t Count = FragmentSize / AF.getValueSize();
|
||||||
|
|
||||||
|
assert(AF.getValueSize() && "Invalid virtual align in concrete fragment!");
|
||||||
|
|
||||||
// FIXME: This error shouldn't actually occur (the front end should emit
|
// FIXME: This error shouldn't actually occur (the front end should emit
|
||||||
// multiple .align directives to enforce the semantics it wants), but is
|
// multiple .align directives to enforce the semantics it wants), but is
|
||||||
// severe enough that we want to report it. How to handle this?
|
// severe enough that we want to report it. How to handle this?
|
||||||
@ -912,7 +905,7 @@ void MCZeroFillFragment::dump() {
|
|||||||
OS << "<MCZeroFillFragment ";
|
OS << "<MCZeroFillFragment ";
|
||||||
this->MCFragment::dump();
|
this->MCFragment::dump();
|
||||||
OS << "\n ";
|
OS << "\n ";
|
||||||
OS << " Size:" << getSize() << " Alignment:" << getAlignment() << ">";
|
OS << " Size:" << getSize() << ">";
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCSectionData::dump() {
|
void MCSectionData::dump() {
|
||||||
|
@ -321,7 +321,12 @@ void MCMachOStreamer::EmitZerofill(const MCSection *Section, MCSymbol *Symbol,
|
|||||||
|
|
||||||
MCSymbolData &SD = Assembler.getOrCreateSymbolData(*Symbol);
|
MCSymbolData &SD = Assembler.getOrCreateSymbolData(*Symbol);
|
||||||
|
|
||||||
MCFragment *F = new MCZeroFillFragment(Size, ByteAlignment, &SectData);
|
// Emit an align fragment if necessary.
|
||||||
|
if (ByteAlignment != 1)
|
||||||
|
new MCAlignFragment(ByteAlignment, 0, 0, ByteAlignment, /*EmitNops=*/false,
|
||||||
|
&SectData);
|
||||||
|
|
||||||
|
MCFragment *F = new MCZeroFillFragment(Size, &SectData);
|
||||||
SD.setFragment(F);
|
SD.setFragment(F);
|
||||||
if (Assembler.isSymbolLinkerVisible(&SD))
|
if (Assembler.isSymbolLinkerVisible(&SD))
|
||||||
F->setAtom(&SD);
|
F->setAtom(&SD);
|
||||||
|
Loading…
Reference in New Issue
Block a user