Date: Thu, 2 Apr 2020 23:28:03 -0700 From: Fangrui Song <i@...kray.me> To: musl@...ts.openwall.com Subject: [PATCH] fix the symbol value for a dynamic relocation referencing a SHN_ABS symbol fixes the example at https://sourceware.org/bugzilla/show_bug.cgi?id=19818#c3 the glibc bug also mentions dladdr() but that change seems more disruptive and i am now sure whether/how that should be fixed. --- ldso/dynlink.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ldso/dynlink.c b/ldso/dynlink.c index afec985a..6f4b50c9 100644 --- a/ldso/dynlink.c +++ b/ldso/dynlink.c @@ -403,7 +403,10 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri def.dso = dso; } - sym_val = def.sym ? (size_t)laddr(def.dso, def.sym->st_value) : 0; + sym_val = def.sym + ? def.sym->st_shndx == SHN_ABS ? def.sym->st_value + : (size_t)laddr(def.dso, def.sym->st_value) + : 0; tls_val = def.sym ? def.sym->st_value : 0; if ((type == REL_TPOFF || type == REL_TPOFF_NEG) -- 2.26.0
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.