提交 43c423af 编写于 作者: R Rich Felker

fix regression in dlopen promotion from RTLD_LOCAL to RTLD_GLOBAL

commit 4ff234f6 inadvertently removed
the logic to do this when changing the representation of global
status.
上级 66b53cfa
......@@ -1771,7 +1771,8 @@ void *dlopen(const char *file, int mode)
}
/* First load handling */
if (!p->deps) {
int first_load = !p->deps;
if (first_load) {
load_deps(p);
if (!p->relocated && (mode & RTLD_LAZY)) {
prepare_lazy(p);
......@@ -1779,11 +1780,15 @@ void *dlopen(const char *file, int mode)
if (!p->deps[i]->relocated)
prepare_lazy(p->deps[i]);
}
}
if (first_load || (mode & RTLD_GLOBAL)) {
/* Make new symbols global, at least temporarily, so we can do
* relocations. If not RTLD_GLOBAL, this is reverted below. */
add_syms(p);
for (i=0; p->deps[i]; i++)
add_syms(p->deps[i]);
}
if (first_load) {
reloc_all(p);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册