From: Rich Felker Date: Thu, 17 Sep 2015 17:50:43 +0000 (+0000) Subject: further refactoring of dynamic linker load address computations X-Git-Tag: v1.1.12~46 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a735f53e6ab094bce9b992dd3d3127fdb4ffdcc2;p=oweals%2Fmusl.git further refactoring of dynamic linker load address computations these are in do_relocs. the first one was omitted in commit 301335a80b85f12c018e4acf1a2c28615e119f8d because it slightly changes code (using dso->base rather than cached local var base) and would have prevented easy verification. the other was an oversight. --- diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 75fae762..6e79a77e 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -288,7 +288,7 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri type = R_TYPE(rel[1]); if (type == REL_NONE) continue; sym_index = R_SYM(rel[1]); - reloc_addr = (void *)(base + rel[0]); + reloc_addr = laddr(dso, rel[0]); if (sym_index) { sym = syms + sym_index; name = strings + sym->st_name; @@ -322,7 +322,7 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri addend = *reloc_addr; } - sym_val = def.sym ? (size_t)def.dso->base+def.sym->st_value : 0; + sym_val = def.sym ? (size_t)laddr(def.dso, def.sym->st_value) : 0; tls_val = def.sym ? def.sym->st_value : 0; switch(type) {