mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-15 10:17:20 +00:00
rtld symlook_obj: move common code to check filtees into helper
Revieved by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D43858
This commit is contained in:
parent
69e4b35eb3
commit
9ea864b54b
@ -4690,6 +4690,20 @@ symlook_needed(SymLook *req, const Needed_Entry *needed, DoneList *dlp)
|
||||
return (ESRCH);
|
||||
}
|
||||
|
||||
static int
|
||||
symlook_obj_load_filtees(SymLook *req, SymLook *req1, const Obj_Entry *obj,
|
||||
Needed_Entry *needed)
|
||||
{
|
||||
DoneList donelist;
|
||||
int flags;
|
||||
|
||||
flags = (req->flags & SYMLOOK_EARLY) != 0 ? RTLD_LO_EARLY : 0;
|
||||
load_filtees(__DECONST(Obj_Entry *, obj), flags, req->lockstate);
|
||||
donelist_init(&donelist);
|
||||
symlook_init_from_req(req1, req);
|
||||
return (symlook_needed(req1, needed, &donelist));
|
||||
}
|
||||
|
||||
/*
|
||||
* Search the symbol table of a single shared object for a symbol of
|
||||
* the given name and version, if requested. Returns a pointer to the
|
||||
@ -4702,9 +4716,8 @@ symlook_needed(SymLook *req, const Needed_Entry *needed, DoneList *dlp)
|
||||
int
|
||||
symlook_obj(SymLook *req, const Obj_Entry *obj)
|
||||
{
|
||||
DoneList donelist;
|
||||
SymLook req1;
|
||||
int flags, res, mres;
|
||||
int res, mres;
|
||||
|
||||
/*
|
||||
* If there is at least one valid hash at this point, we prefer to
|
||||
@ -4719,11 +4732,8 @@ symlook_obj(SymLook *req, const Obj_Entry *obj)
|
||||
|
||||
if (mres == 0) {
|
||||
if (obj->needed_filtees != NULL) {
|
||||
flags = (req->flags & SYMLOOK_EARLY) ? RTLD_LO_EARLY : 0;
|
||||
load_filtees(__DECONST(Obj_Entry *, obj), flags, req->lockstate);
|
||||
donelist_init(&donelist);
|
||||
symlook_init_from_req(&req1, req);
|
||||
res = symlook_needed(&req1, obj->needed_filtees, &donelist);
|
||||
res = symlook_obj_load_filtees(req, &req1, obj,
|
||||
obj->needed_filtees);
|
||||
if (res == 0) {
|
||||
req->sym_out = req1.sym_out;
|
||||
req->defobj_out = req1.defobj_out;
|
||||
@ -4731,11 +4741,8 @@ symlook_obj(SymLook *req, const Obj_Entry *obj)
|
||||
return (res);
|
||||
}
|
||||
if (obj->needed_aux_filtees != NULL) {
|
||||
flags = (req->flags & SYMLOOK_EARLY) ? RTLD_LO_EARLY : 0;
|
||||
load_filtees(__DECONST(Obj_Entry *, obj), flags, req->lockstate);
|
||||
donelist_init(&donelist);
|
||||
symlook_init_from_req(&req1, req);
|
||||
res = symlook_needed(&req1, obj->needed_aux_filtees, &donelist);
|
||||
res = symlook_obj_load_filtees(req, &req1, obj,
|
||||
obj->needed_aux_filtees);
|
||||
if (res == 0) {
|
||||
req->sym_out = req1.sym_out;
|
||||
req->defobj_out = req1.defobj_out;
|
||||
|
Loading…
Reference in New Issue
Block a user