diff options
Diffstat (limited to 'lld/ELF/OutputSections.cpp')
| -rw-r--r-- | lld/ELF/OutputSections.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 546dc58b4bc8..a2da5543d586 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -253,8 +253,20 @@ void OutputSection::finalizeInputSections() { for (InputSection *s : isd->sections) commitSection(s); } - for (auto *ms : mergeSections) + for (auto *ms : mergeSections) { + // Merging may have increased the alignment of a spillable section. Update + // the alignment of potential spill sections and their containing output + // sections. + if (auto it = script->potentialSpillLists.find(ms); + it != script->potentialSpillLists.end()) { + for (PotentialSpillSection *s = it->second.head; s; s = s->next) { + s->addralign = std::max(s->addralign, ms->addralign); + s->parent->addralign = std::max(s->parent->addralign, s->addralign); + } + } + ms->finalizeContents(); + } } static void sortByOrder(MutableArrayRef<InputSection *> in, |
