[all-commits] [llvm/llvm-project] 6f9077: [lld/ELF] Avoid unnecessary TPOFF relocations in G...
Ulrich Weigand via All-commits
all-commits at lists.llvm.org
Wed Feb 14 09:26:49 PST 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 6f907733e65d24edad65f763fb14402464bd578b
https://github.com/llvm/llvm-project/commit/6f907733e65d24edad65f763fb14402464bd578b
Author: Ulrich Weigand <ulrich.weigand at de.ibm.com>
Date: 2024-02-14 (Wed, 14 Feb 2024)
Changed paths:
M lld/ELF/Relocations.cpp
M lld/test/ELF/systemz-tls-ie.s
Log Message:
-----------
[lld/ELF] Avoid unnecessary TPOFF relocations in GOT for -pie (#81739)
With the new SystemZ port we noticed that -pie executables generated
from files containing R_390_TLS_IEENT relocations will have unnecessary
relocations in their GOT:
9e8d8: R_390_TLS_TPOFF *ABS*+0x18
This is caused by the config->isPic conditon in addTpOffsetGotEntry:
static void addTpOffsetGotEntry(Symbol &sym) {
in.got->addEntry(sym);
uint64_t off = sym.getGotOffset();
if (!sym.isPreemptible && !config->isPic) {
in.got->addConstant({R_TPREL, target->symbolicRel, off, 0, &sym});
return;
}
It is correct that we need to retain a TPOFF relocation if the target
symbol is preemptible or if we're building a shared library. But when
building a -pie executable, those values are fixed at link time and
there's no need for any remaining dynamic relocation.
Note that the equivalent MIPS-specific code in MipsGotSection::build
checks for config->shared instead of config->isPic; we should use the
same check here. (Note also that on many other platforms we're not even
using addTpOffsetGotEntry in this case as an IE->LE relaxation is
applied before; we don't have this type of relaxation on SystemZ.)
More information about the All-commits
mailing list