forked from OSchip/llvm-project
[ELF] Refactor uses of getInputSections to improve efficiency NFC
Add new method getFirstInputSection and use instead of getInputSections where appropriate to avoid creation of an unneeded vector of input sections. Differential Revision: https://reviews.llvm.org/D73047
This commit is contained in:
parent
bc29069dc4
commit
4e8116f469
|
@ -953,7 +953,7 @@ void LinkerScript::adjustSectionsBeforeSorting() {
|
|||
|
||||
// We do not want to keep any special flags for output section
|
||||
// in case it is empty.
|
||||
bool isEmpty = getInputSections(sec).empty();
|
||||
bool isEmpty = (getFirstInputSection(sec) == nullptr);
|
||||
if (isEmpty)
|
||||
sec->flags = flags & ((sec->nonAlloc ? 0 : (uint64_t)SHF_ALLOC) |
|
||||
SHF_WRITE | SHF_EXECINSTR);
|
||||
|
|
|
@ -357,8 +357,7 @@ static void finalizeShtGroup(OutputSection *os,
|
|||
}
|
||||
|
||||
void OutputSection::finalize() {
|
||||
std::vector<InputSection *> v = getInputSections(this);
|
||||
InputSection *first = v.empty() ? nullptr : v[0];
|
||||
InputSection *first = getFirstInputSection(this);
|
||||
|
||||
if (flags & SHF_LINK_ORDER) {
|
||||
// We must preserve the link order dependency of sections with the
|
||||
|
@ -466,7 +465,15 @@ int getPriority(StringRef s) {
|
|||
return v;
|
||||
}
|
||||
|
||||
std::vector<InputSection *> getInputSections(OutputSection *os) {
|
||||
InputSection *getFirstInputSection(const OutputSection *os) {
|
||||
for (BaseCommand *base : os->sectionCommands)
|
||||
if (auto *isd = dyn_cast<InputSectionDescription>(base))
|
||||
if (!isd->sections.empty())
|
||||
return isd->sections[0];
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::vector<InputSection *> getInputSections(const OutputSection *os) {
|
||||
std::vector<InputSection *> ret;
|
||||
for (BaseCommand *base : os->sectionCommands)
|
||||
if (auto *isd = dyn_cast<InputSectionDescription>(base))
|
||||
|
|
|
@ -118,7 +118,8 @@ private:
|
|||
|
||||
int getPriority(StringRef s);
|
||||
|
||||
std::vector<InputSection *> getInputSections(OutputSection* os);
|
||||
InputSection *getFirstInputSection(const OutputSection *os);
|
||||
std::vector<InputSection *> getInputSections(const OutputSection *os);
|
||||
|
||||
// All output sections that are handled by the linker specially are
|
||||
// globally accessible. Writer initializes them, so don't use them
|
||||
|
|
Loading…
Reference in New Issue