Do not reference z_nodeflib for !objgiven case, thus fixing LD_PRELOAD

for a non-absolute path.

PR:	bin/171604
MFC after:	3 days
This commit is contained in:
Konstantin Belousov 2012-09-19 05:11:25 +00:00
parent ab2043b81e
commit 1a4f1f697c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=240686

View file

@ -1429,7 +1429,7 @@ find_library(const char *xname, const Obj_Entry *refobj)
{
char *pathname;
char *name;
bool objgiven;
bool nodeflib, objgiven;
objgiven = refobj != NULL;
if (strchr(xname, '/') != NULL) { /* Hard coded pathname */
@ -1464,6 +1464,7 @@ find_library(const char *xname, const Obj_Entry *refobj)
(pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL)
return (pathname);
} else {
nodeflib = objgiven ? refobj->z_nodeflib : false;
if ((objgiven &&
(pathname = search_library_path(name, refobj->rpath)) != NULL) ||
(objgiven && refobj->runpath == NULL && refobj != obj_main &&
@ -1471,9 +1472,8 @@ find_library(const char *xname, const Obj_Entry *refobj)
(pathname = search_library_path(name, ld_library_path)) != NULL ||
(objgiven &&
(pathname = search_library_path(name, refobj->runpath)) != NULL) ||
(pathname = search_library_path(name, gethints(refobj->z_nodeflib)))
!= NULL ||
(objgiven && !refobj->z_nodeflib &&
(pathname = search_library_path(name, gethints(nodeflib))) != NULL ||
(objgiven && !nodeflib &&
(pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL))
return (pathname);
}