diff options
author | Philip Guenther <guenther@cvs.openbsd.org> | 2019-11-10 22:21:55 +0000 |
---|---|---|
committer | Philip Guenther <guenther@cvs.openbsd.org> | 2019-11-10 22:21:55 +0000 |
commit | 3833add3df1c111c2ff9d147514bbac64411ec79 (patch) | |
tree | a57160b4483d647561a0b75b7b532b552e30843c /libexec/ld.so/mips64 | |
parent | 67400c30609dc68fe7e8b287645ca8632b352ee1 (diff) |
Simplify the handling of the explicit relocations based on ld.so only
have NONE and REL32_64 relocations w/o symbol.
ok visa@
Diffstat (limited to 'libexec/ld.so/mips64')
-rw-r--r-- | libexec/ld.so/mips64/boot_md.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/libexec/ld.so/mips64/boot_md.c b/libexec/ld.so/mips64/boot_md.c index 2ca2b082b6f..00bc3ad324a 100644 --- a/libexec/ld.so/mips64/boot_md.c +++ b/libexec/ld.so/mips64/boot_md.c @@ -1,4 +1,4 @@ -/* $OpenBSD: boot_md.c,v 1.2 2019/11/10 22:20:10 guenther Exp $ */ +/* $OpenBSD: boot_md.c,v 1.3 2019/11/10 22:21:54 guenther Exp $ */ /* * Copyright (c) 1998 Per Fogelstrom, Opsycon AB @@ -75,8 +75,7 @@ _dl_boot_bind(const long sp, long *dl_data, Elf_Dyn *dynp) int n, argc; char **argv, **envp; long loff; - Elf_Addr i; - RELOC_TYPE *rp; + RELOC_TYPE *rp, *rend; /* * Scan argument and environment vectors. Find dynamic @@ -138,17 +137,13 @@ _dl_boot_bind(const long sp, long *dl_data, Elf_Dyn *dynp) } rp = dynld.dt_reloc; - for (i = 0; i < dynld.dt_relocsz; i += sizeof *rp) { - Elf_Addr *ra; - const Elf_Sym *sp; + rend = (RELOC_TYPE *)((char *)rp + dynld.dt_relocsz); + for (; rp < rend; rp++) { + if (ELF_R_TYPE(rp->r_info) != R_MIPS_NONE) { + Elf_Addr *ra = (Elf_Addr *)(rp->r_offset + loff); - sp = dynld.dt_symtab + ELF_R_SYM(rp->r_info); - if (ELF_R_SYM(rp->r_info) && sp->st_value == 0) - _dl_exit(6); - - ra = (Elf_Addr *)(rp->r_offset + loff); - RELOC_DYN(rp, sp, ra, loff); - rp++; + *ra += loff; + } } RELOC_GOT(&dynld, loff); |