MC: Change LayoutSection() to only do the section initializiation.

Also, elimminate MCAsmLayout::set*, which are no longer needed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103750 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2010-05-14 00:37:11 +00:00
parent 7f68719517
commit afc6acdab7
2 changed files with 16 additions and 36 deletions

View File

@ -58,8 +58,9 @@ public:
/// been initialized. /// been initialized.
void LayoutFragment(MCFragment *Fragment); void LayoutFragment(MCFragment *Fragment);
/// \brief Performs layout for a single section, assuming that the previous /// \brief Performs initial layout for a single section, assuming that the
/// section has already been layed out correctly. /// previous section (including its fragments) has already been layed out
/// correctly.
void LayoutSection(MCSectionData *SD); void LayoutSection(MCSectionData *SD);
/// @name Section Access (in layout order) /// @name Section Access (in layout order)
@ -80,15 +81,9 @@ public:
/// current layout. /// current layout.
uint64_t getFragmentEffectiveSize(const MCFragment *F) const; uint64_t getFragmentEffectiveSize(const MCFragment *F) const;
/// \brief Set the effective size of the given fragment.
void setFragmentEffectiveSize(MCFragment *F, uint64_t Value);
/// \brief Get the offset of the given fragment inside its containing section. /// \brief Get the offset of the given fragment inside its containing section.
uint64_t getFragmentOffset(const MCFragment *F) const; uint64_t getFragmentOffset(const MCFragment *F) const;
/// \brief Set the offset of the given fragment inside its containing section.
void setFragmentOffset(MCFragment *F, uint64_t Value);
/// @} /// @}
/// @name Section Layout Data /// @name Section Layout Data
/// @{ /// @{
@ -96,9 +91,6 @@ public:
/// \brief Get the computed address of the given section. /// \brief Get the computed address of the given section.
uint64_t getSectionAddress(const MCSectionData *SD) const; uint64_t getSectionAddress(const MCSectionData *SD) const;
/// \brief Set the computed address of the given section.
void setSectionAddress(MCSectionData *SD, uint64_t Value);
/// @} /// @}
/// @name Utility Functions /// @name Utility Functions
/// @{ /// @{

View File

@ -87,19 +87,11 @@ uint64_t MCAsmLayout::getFragmentEffectiveSize(const MCFragment *F) const {
return F->EffectiveSize; return F->EffectiveSize;
} }
void MCAsmLayout::setFragmentEffectiveSize(MCFragment *F, uint64_t Value) {
F->EffectiveSize = Value;
}
uint64_t MCAsmLayout::getFragmentOffset(const MCFragment *F) const { uint64_t MCAsmLayout::getFragmentOffset(const MCFragment *F) const {
assert(F->Offset != ~UINT64_C(0) && "Address not set!"); assert(F->Offset != ~UINT64_C(0) && "Address not set!");
return F->Offset; return F->Offset;
} }
void MCAsmLayout::setFragmentOffset(MCFragment *F, uint64_t Value) {
F->Offset = Value;
}
uint64_t MCAsmLayout::getSymbolAddress(const MCSymbolData *SD) const { uint64_t MCAsmLayout::getSymbolAddress(const MCSymbolData *SD) const {
assert(SD->getFragment() && "Invalid getAddress() on undefined symbol!"); assert(SD->getFragment() && "Invalid getAddress() on undefined symbol!");
return getFragmentAddress(SD->getFragment()) + SD->getOffset(); return getFragmentAddress(SD->getFragment()) + SD->getOffset();
@ -110,12 +102,8 @@ uint64_t MCAsmLayout::getSectionAddress(const MCSectionData *SD) const {
return SD->Address; return SD->Address;
} }
void MCAsmLayout::setSectionAddress(MCSectionData *SD, uint64_t Value) {
SD->Address = Value;
}
uint64_t MCAsmLayout::getSectionAddressSize(const MCSectionData *SD) const { uint64_t MCAsmLayout::getSectionAddressSize(const MCSectionData *SD) const {
// Otherwise, the size is the last fragment's end offset. // The size is the last fragment's end offset.
const MCFragment &F = SD->getFragmentList().back(); const MCFragment &F = SD->getFragmentList().back();
return getFragmentOffset(&F) + getFragmentEffectiveSize(&F); return getFragmentOffset(&F) + getFragmentEffectiveSize(&F);
} }
@ -426,8 +414,14 @@ uint64_t MCAssembler::ComputeFragmentSize(MCAsmLayout &Layout,
} }
void MCAsmLayout::LayoutFile() { void MCAsmLayout::LayoutFile() {
for (unsigned i = 0, e = getSectionOrder().size(); i != e; ++i) for (unsigned i = 0, e = getSectionOrder().size(); i != e; ++i) {
LayoutSection(getSectionOrder()[i]); MCSectionData *SD = getSectionOrder()[i];
LayoutSection(SD);
for (MCSectionData::iterator it = SD->begin(),
ie = SD->end(); it != ie; ++it)
LayoutFragment(it);
}
} }
void MCAsmLayout::LayoutFragment(MCFragment *F) { void MCAsmLayout::LayoutFragment(MCFragment *F) {
@ -443,12 +437,9 @@ void MCAsmLayout::LayoutFragment(MCFragment *F) {
++stats::FragmentLayouts; ++stats::FragmentLayouts;
// Compute fragment offset and size. // Compute fragment offset and size.
uint64_t Offset = Address - StartAddress; F->Offset = Address - StartAddress;
uint64_t EffectiveSize = F->EffectiveSize = getAssembler().ComputeFragmentSize(*this, *F, StartAddress,
getAssembler().ComputeFragmentSize(*this, *F, StartAddress, Offset); F->Offset);
setFragmentOffset(F, Offset);
setFragmentEffectiveSize(F, EffectiveSize);
} }
void MCAsmLayout::LayoutSection(MCSectionData *SD) { void MCAsmLayout::LayoutSection(MCSectionData *SD) {
@ -467,10 +458,7 @@ void MCAsmLayout::LayoutSection(MCSectionData *SD) {
StartAddress = RoundUpToAlignment(StartAddress, SD->getAlignment()); StartAddress = RoundUpToAlignment(StartAddress, SD->getAlignment());
// Set the section address. // Set the section address.
setSectionAddress(SD, StartAddress); SD->Address = StartAddress;
for (MCSectionData::iterator it = SD->begin(), ie = SD->end(); it != ie; ++it)
LayoutFragment(it);
} }
/// WriteFragmentData - Write the \arg F data to the output file. /// WriteFragmentData - Write the \arg F data to the output file.