bool FragmentNeedsRelaxation(const MCInstFragment *IF,
const MCAsmLayout &Layout) const;
- /// LayoutSection - Assign offsets and sizes to the fragments in the section
- /// \arg SD, and update the section size. The section file offset should
- /// already have been computed.
- void LayoutSection(MCSectionData &SD, MCAsmLayout &Layout);
+ /// LayoutSection - Assign the section the given \arg StartAddress, and then
+ /// assign offsets and sizes to the fragments in the section \arg SD, and
+ /// update the section size.
+ void LayoutSection(MCSectionData &SD, MCAsmLayout &Layout,
+ uint64_t StartAddress);
/// LayoutOnce - Perform one layout iteration and return true if any offsets
/// were adjusted.
}
void MCAssembler::LayoutSection(MCSectionData &SD,
- MCAsmLayout &Layout) {
- uint64_t Address, StartAddress = Address = Layout.getSectionAddress(&SD);
+ MCAsmLayout &Layout,
+ uint64_t StartAddress) {
+ Layout.setSectionAddress(&SD, StartAddress);
+ uint64_t Address = StartAddress;
for (MCSectionData::iterator it = SD.begin(), ie = SD.end(); it != ie; ++it) {
MCFragment &F = *it;
}
// Layout the section fragments and its size.
- Layout.setSectionAddress(&SD, Address);
- LayoutSection(SD, Layout);
+ LayoutSection(SD, Layout, Address);
Address += Layout.getSectionFileSize(&SD);
Prev = &SD;
if (uint64_t Pad = OffsetToAlignment(Address, it->getAlignment()))
Address += Pad;
- Layout.setSectionAddress(&SD, Address);
- LayoutSection(SD, Layout);
+ LayoutSection(SD, Layout, Address);
Address += Layout.getSectionSize(&SD);
}