mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 16:37:42 +00:00
MC: Implicitly assign section addresses when the previous fragment is layed out.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103752 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
337718e09c
commit
11c4111516
@ -414,10 +414,13 @@ uint64_t MCAssembler::ComputeFragmentSize(MCAsmLayout &Layout,
|
||||
}
|
||||
|
||||
void MCAsmLayout::LayoutFile() {
|
||||
// Initialize the first section.
|
||||
if (!getSectionOrder().empty())
|
||||
getSectionOrder().front()->Address = 0;
|
||||
|
||||
for (unsigned i = 0, e = getSectionOrder().size(); i != e; ++i) {
|
||||
MCSectionData *SD = getSectionOrder()[i];
|
||||
|
||||
LayoutSection(SD);
|
||||
for (MCSectionData::iterator it = SD->begin(),
|
||||
ie = SD->end(); it != ie; ++it)
|
||||
LayoutFragment(it);
|
||||
@ -440,6 +443,13 @@ void MCAsmLayout::LayoutFragment(MCFragment *F) {
|
||||
F->Offset = Address - StartAddress;
|
||||
F->EffectiveSize = getAssembler().ComputeFragmentSize(*this, *F, StartAddress,
|
||||
F->Offset);
|
||||
|
||||
// If this is the last fragment in a section, update the next section address.
|
||||
if (!F->getNextNode()) {
|
||||
unsigned NextIndex = F->getParent()->getLayoutOrder() + 1;
|
||||
if (NextIndex != getSectionOrder().size())
|
||||
LayoutSection(getSectionOrder()[NextIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
void MCAsmLayout::LayoutSection(MCSectionData *SD) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user