diff options
author | Rich Felker <dalias@aerifal.cx> | 2022-08-02 17:29:01 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2022-08-02 17:29:01 -0400 |
commit | bf99258564fd5b58974d93201ab61506eb8cb03e (patch) | |
tree | 27d43d16c37821b8cb840fd4e17500cdf4b83a5d /ldso | |
parent | d32dadd60efb9d3b255351a3b532f8e4c3dd0db1 (diff) | |
download | musl-bf99258564fd5b58974d93201ab61506eb8cb03e.zip musl-bf99258564fd5b58974d93201ab61506eb8cb03e.tar.gz musl-bf99258564fd5b58974d93201ab61506eb8cb03e.tar.bz2 |
ldso: process RELR only for non-FDPIC archs
the way RELR is applied is not a meaningful operation for FDPIC (there
is no single "base" address). it seems unlikely RELR would ever be
added for FDPIC, but if it ever is, the behavior and possibly data
format will need to be different, so guard against calling the
non-FDPIC code.
Diffstat (limited to 'ldso')
-rw-r--r-- | ldso/dynlink.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/ldso/dynlink.c b/ldso/dynlink.c index e92f03c..fd09ca6 100644 --- a/ldso/dynlink.c +++ b/ldso/dynlink.c @@ -1375,7 +1375,8 @@ static void reloc_all(struct dso *p) 2+(dyn[DT_PLTREL]==DT_RELA)); do_relocs(p, laddr(p, dyn[DT_REL]), dyn[DT_RELSZ], 2); do_relocs(p, laddr(p, dyn[DT_RELA]), dyn[DT_RELASZ], 3); - do_relr_relocs(p, laddr(p, dyn[DT_RELR]), dyn[DT_RELRSZ]); + if (!DL_FDPIC) + do_relr_relocs(p, laddr(p, dyn[DT_RELR]), dyn[DT_RELRSZ]); if (head != &ldso && p->relro_start != p->relro_end) { long ret = __syscall(SYS_mprotect, laddr(p, p->relro_start), |