MFC r313494:

Handle protected symbols in rtld.
This commit is contained in:
Konstantin Belousov 2017-02-24 11:07:49 +00:00
parent ac690a4d03
commit b8093578a6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/stable/10/; revision=314199

View File

@ -3833,15 +3833,19 @@ symlook_default(SymLook *req, const Obj_Entry *refobj)
donelist_init(&donelist);
symlook_init_from_req(&req1, req);
/* Look first in the referencing object if linked symbolically. */
if (refobj->symbolic && !donelist_check(&donelist, refobj)) {
res = symlook_obj(&req1, refobj);
if (res == 0) {
req->sym_out = req1.sym_out;
req->defobj_out = req1.defobj_out;
assert(req->defobj_out != NULL);
}
/*
* Look first in the referencing object if linked symbolically,
* and similarly handle protected symbols.
*/
res = symlook_obj(&req1, refobj);
if (res == 0 && (refobj->symbolic ||
ELF_ST_VISIBILITY(req1.sym_out->st_other) == STV_PROTECTED)) {
req->sym_out = req1.sym_out;
req->defobj_out = req1.defobj_out;
assert(req->defobj_out != NULL);
}
if (refobj->symbolic || req->defobj_out != NULL)
donelist_check(&donelist, refobj);
symlook_global(req, &donelist);