diff options
-rw-r--r-- | lld/ELF/Writer.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 832357462cb..c3fd6886ac1 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -485,6 +485,12 @@ template <class ELFT> void Writer<ELFT>::createSections() { // Fill the DynStrTab early. Out<ELFT>::Dynamic->finalize(); + + // Fix each section's header (e.g. sh_size, sh_link, etc.) + for (OutputSectionBase<ELFT::Is64Bits> *Sec : OutputSections) { + Out<ELFT>::StrTab->add(Sec->getName()); + Sec->finalize(); + } } template <class ELFT> @@ -524,9 +530,6 @@ template <class ELFT> void Writer<ELFT>::assignAddresses() { FileHeaderPHDR.Header.p_align = Target->getPageSize(); for (OutputSectionBase<ELFT::Is64Bits> *Sec : OutputSections) { - Out<ELFT>::StrTab->add(Sec->getName()); - Sec->finalize(); - if (Sec->getSize()) { uintX_t Flags = toPHDRFlags(Sec->getFlags()); ProgramHeader<ELFT> *Last = PHDRs.back(); |