[llvm-branch-commits] [ELF] Place .lbss/.lrodata/.ldata after .bss (PR #81224)
Arthur Eubanks via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Feb 9 13:51:42 PST 2024
================
@@ -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
More information about the llvm-branch-commits
mailing list