mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-15 22:32:35 +00:00
MC: Switch MCFragment to storing the layout order index, not its index in the file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103751 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
afc6acdab7
commit
337718e09c
@ -96,9 +96,9 @@ private:
|
||||
/// initialized.
|
||||
uint64_t EffectiveSize;
|
||||
|
||||
/// Ordinal - The global index of this fragment. This is the index across all
|
||||
/// sections, not just the parent section.
|
||||
unsigned Ordinal;
|
||||
/// LayoutOrder - The global layout order of this fragment. This is the index
|
||||
/// across all fragments in the file, not just within the section.
|
||||
unsigned LayoutOrder;
|
||||
|
||||
/// @}
|
||||
|
||||
@ -118,8 +118,8 @@ public:
|
||||
MCSymbolData *getAtom() const { return Atom; }
|
||||
void setAtom(MCSymbolData *Value) { Atom = Value; }
|
||||
|
||||
unsigned getOrdinal() const { return Ordinal; }
|
||||
void setOrdinal(unsigned Value) { Ordinal = Value; }
|
||||
unsigned getLayoutOrder() const { return LayoutOrder; }
|
||||
void setLayoutOrder(unsigned Value) { LayoutOrder = Value; }
|
||||
|
||||
static bool classof(const MCFragment *O) { return true; }
|
||||
|
||||
|
@ -599,10 +599,6 @@ void MCAssembler::Finish() {
|
||||
// Create the layout object.
|
||||
MCAsmLayout Layout(*this);
|
||||
|
||||
// Assign layout order indices.
|
||||
for (unsigned i = 0, e = Layout.getSectionOrder().size(); i != e; ++i)
|
||||
Layout.getSectionOrder()[i]->setLayoutOrder(i);
|
||||
|
||||
// Insert additional align fragments for concrete sections to explicitly pad
|
||||
// the previous section to match their alignment requirements. This is for
|
||||
// 'gas' compatibility, it shouldn't strictly be necessary.
|
||||
@ -627,10 +623,8 @@ void MCAssembler::Finish() {
|
||||
AF->setOnlyAlignAddress(true);
|
||||
}
|
||||
|
||||
// Assign section and fragment ordinals, all subsequent backend code is
|
||||
// responsible for updating these in place.
|
||||
// Create dummy fragments and assign section ordinals.
|
||||
unsigned SectionIndex = 0;
|
||||
unsigned FragmentIndex = 0;
|
||||
for (MCAssembler::iterator it = begin(), ie = end(); it != ie; ++it) {
|
||||
// Create dummy fragments to eliminate any empty sections, this simplifies
|
||||
// layout.
|
||||
@ -642,10 +636,17 @@ void MCAssembler::Finish() {
|
||||
}
|
||||
|
||||
it->setOrdinal(SectionIndex++);
|
||||
}
|
||||
|
||||
for (MCSectionData::iterator it2 = it->begin(),
|
||||
ie2 = it->end(); it2 != ie2; ++it2)
|
||||
it2->setOrdinal(FragmentIndex++);
|
||||
// Assign layout order indices to sections and fragments.
|
||||
unsigned FragmentIndex = 0;
|
||||
for (unsigned i = 0, e = Layout.getSectionOrder().size(); i != e; ++i) {
|
||||
MCSectionData *SD = Layout.getSectionOrder()[i];
|
||||
SD->setLayoutOrder(i);
|
||||
|
||||
for (MCSectionData::iterator it2 = SD->begin(),
|
||||
ie2 = SD->end(); it2 != ie2; ++it2)
|
||||
it2->setLayoutOrder(FragmentIndex++);
|
||||
}
|
||||
|
||||
// Layout until everything fits.
|
||||
@ -827,7 +828,7 @@ void MCAssembler::FinishLayout(MCAsmLayout &Layout) {
|
||||
// Update the data fragments layout data.
|
||||
DF->setParent(IF->getParent());
|
||||
DF->setAtom(IF->getAtom());
|
||||
DF->setOrdinal(IF->getOrdinal());
|
||||
DF->setLayoutOrder(IF->getLayoutOrder());
|
||||
Layout.FragmentReplaced(IF, DF);
|
||||
|
||||
// Copy in the data and the fixups.
|
||||
@ -857,8 +858,8 @@ raw_ostream &operator<<(raw_ostream &OS, const MCAsmFixup &AF) {
|
||||
void MCFragment::dump() {
|
||||
raw_ostream &OS = llvm::errs();
|
||||
|
||||
OS << "<MCFragment " << (void*) this << " Offset:" << Offset
|
||||
<< " EffectiveSize:" << EffectiveSize << ">";
|
||||
OS << "<MCFragment " << (void*) this << " LayoutOrder:" << LayoutOrder
|
||||
<< " Offset:" << Offset << " EffectiveSize:" << EffectiveSize << ">";
|
||||
}
|
||||
|
||||
void MCAlignFragment::dump() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user