提交 deb15b3c 编写于 作者: R Rich Felker

fix breakage in dlsym for looking up RTLD_DEFAULT, etc.

this was broken during the early dynamic-linked TLS commits, which
rearranged some of the code for handling new relocation types.
上级 dde325d7
......@@ -1080,11 +1080,14 @@ static void *do_dlsym(struct dso *p, const char *s, void *ra)
uint32_t h = 0, gh = 0;
Sym *sym;
if (p == head || p == RTLD_DEFAULT || p == RTLD_NEXT) {
if (p == RTLD_NEXT) {
if (p == RTLD_DEFAULT) {
p = head;
} else if (p == RTLD_NEXT) {
for (p=head; p && (unsigned char *)ra-p->map>p->map_len; p=p->next);
if (!p) p=head;
p = p->next;
}
struct symdef def = find_sym(p->next, s, 0);
struct symdef def = find_sym(p, s, 0);
if (!def.sym) goto failed;
return def.dso->base + def.sym->st_value;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册