further refactoring of dynamic linker load address computations
these are in do_relocs. the first one was omitted in commit
301335a80b 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.
This commit is contained in:
+2
-2
@@ -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]);
|
type = R_TYPE(rel[1]);
|
||||||
if (type == REL_NONE) continue;
|
if (type == REL_NONE) continue;
|
||||||
sym_index = R_SYM(rel[1]);
|
sym_index = R_SYM(rel[1]);
|
||||||
reloc_addr = (void *)(base + rel[0]);
|
reloc_addr = laddr(dso, rel[0]);
|
||||||
if (sym_index) {
|
if (sym_index) {
|
||||||
sym = syms + sym_index;
|
sym = syms + sym_index;
|
||||||
name = strings + sym->st_name;
|
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;
|
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;
|
tls_val = def.sym ? def.sym->st_value : 0;
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
|
|||||||
Reference in New Issue
Block a user