aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libexec/rtld-elf/arm/reloc.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libexec/rtld-elf/arm/reloc.c b/libexec/rtld-elf/arm/reloc.c
index c3e95940be74..6efc9f499761 100644
--- a/libexec/rtld-elf/arm/reloc.c
+++ b/libexec/rtld-elf/arm/reloc.c
@@ -280,10 +280,13 @@ reloc_nonplt_object(Obj_Entry *obj, const Elf_Rel *rel, SymCache *cache,
return -1;
tmp = (Elf_Addr)def->st_value + defobj->tlsoffset;
- if (__predict_true(RELOC_ALIGNED_P(where)))
+ if (__predict_true(RELOC_ALIGNED_P(where))) {
+ tmp += *where;
*where = tmp;
- else
+ } else {
+ tmp += load_ptr(where);
store_ptr(where, tmp);
+ }
dbg("TLS_TPOFF32 %s in %s --> %p",
obj->strtab + obj->symtab[symnum].st_name,
obj->path, (void *)tmp);