summaryrefslogtreecommitdiff
path: root/libexec/ld.so/mips64
diff options
context:
space:
mode:
authorPhilip Guenther <guenther@cvs.openbsd.org>2019-11-10 22:21:55 +0000
committerPhilip Guenther <guenther@cvs.openbsd.org>2019-11-10 22:21:55 +0000
commit3833add3df1c111c2ff9d147514bbac64411ec79 (patch)
treea57160b4483d647561a0b75b7b532b552e30843c /libexec/ld.so/mips64
parent67400c30609dc68fe7e8b287645ca8632b352ee1 (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.c21
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);