================ @@ -1103,31 +1106,36 @@ template <class ELFT> void Writer<ELFT>::setReservedSymbolSections() { } PhdrEntry *last = nullptr; - PhdrEntry *lastRO = nullptr; - + OutputSection *lastRO = nullptr; + auto isLarge = [](OutputSection *osec) { + return config->emachine == EM_X86_64 && osec->flags & SHF_X86_64_LARGE; + }; for (Partition &part : partitions) { for (PhdrEntry *p : part.phdrs) { if (p->p_type != PT_LOAD) continue; last = p; - if (!(p->p_flags & PF_W)) - lastRO = p; + if (!(p->p_flags & PF_W) && p->lastSec && !isLarge(p->lastSec)) + lastRO = p->lastSec; } } if (lastRO) { - // _etext is the first location after the last read-only loadable segment. + // _etext is the first location after the last read-only loadable segment + // that does not contain large sections. if (ElfSym::etext1) - ElfSym::etext1->section = lastRO->lastSec; + ElfSym::etext1->section = lastRO; if (ElfSym::etext2) - ElfSym::etext2->section = lastRO->lastSec; + ElfSym::etext2->section = lastRO; } if (last) { - // _edata points to the end of the last mapped initialized section. + // _edata points to the end of the last mapped initialized section before + // the first regular NOBITS section (except .tbss and .relro_padding). In ---------------- aeubanks wrote:
if we don't have a .bss section, could this point to .tbss or .relro_padding? https://github.com/llvm/llvm-project/pull/81224 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits