mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-14 15:19:33 +00:00
Layout helper function.
Introduce a helper method to add a section to the end of a layout. This will be used by the ELF ObjectWriter code to add the metadata sections (symbol table, etc) to the end of an object file. llvm-svn: 111171
This commit is contained in:
parent
162726c305
commit
5fc461afc4
@ -664,6 +664,8 @@ public:
|
||||
void WriteSectionData(const MCSectionData *Section, const MCAsmLayout &Layout,
|
||||
MCObjectWriter *OW) const;
|
||||
|
||||
void AddSectionToTheEnd(MCSectionData &SD, MCAsmLayout &Layout);
|
||||
|
||||
public:
|
||||
/// Construct a new assembler instance.
|
||||
///
|
||||
|
@ -652,6 +652,40 @@ void MCAssembler::WriteSectionData(const MCSectionData *SD,
|
||||
assert(OW->getStream().tell() - Start == Layout.getSectionFileSize(SD));
|
||||
}
|
||||
|
||||
void MCAssembler::AddSectionToTheEnd(MCSectionData &SD, MCAsmLayout &Layout) {
|
||||
// Create dummy fragments and assign section ordinals.
|
||||
unsigned SectionIndex = 0;
|
||||
for (MCAssembler::iterator it = begin(), ie = end(); it != ie; ++it)
|
||||
SectionIndex++;
|
||||
|
||||
SD.setOrdinal(SectionIndex);
|
||||
|
||||
// Assign layout order indices to sections and fragments.
|
||||
unsigned FragmentIndex = 0;
|
||||
unsigned i = 0;
|
||||
for (unsigned e = Layout.getSectionOrder().size(); i != e; ++i) {
|
||||
MCSectionData *SD = Layout.getSectionOrder()[i];
|
||||
|
||||
for (MCSectionData::iterator it2 = SD->begin(),
|
||||
ie2 = SD->end(); it2 != ie2; ++it2)
|
||||
FragmentIndex++;
|
||||
}
|
||||
|
||||
SD.setLayoutOrder(i);
|
||||
for (MCSectionData::iterator it2 = SD.begin(),
|
||||
ie2 = SD.end(); it2 != ie2; ++it2) {
|
||||
it2->setLayoutOrder(FragmentIndex++);
|
||||
}
|
||||
Layout.getSectionOrder().push_back(&SD);
|
||||
|
||||
Layout.LayoutSection(&SD);
|
||||
|
||||
// Layout until everything fits.
|
||||
while (LayoutOnce(Layout))
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
void MCAssembler::Finish(MCObjectWriter *Writer) {
|
||||
DEBUG_WITH_TYPE("mc-dump", {
|
||||
llvm::errs() << "assembler backend - pre-layout\n--\n";
|
||||
|
Loading…
Reference in New Issue
Block a user