aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorEdward Tomasz Napierala <trasz@FreeBSD.org>2017-10-24 11:24:54 +0000
committerEdward Tomasz Napierala <trasz@FreeBSD.org>2017-10-24 11:24:54 +0000
commit1689a3c4ac37c707e74fbaff09c732e724cd833b (patch)
treefd0a405686f0ce728f03c000436d787f59d8cddf /libexec
parente65ad973b27f47e9b6ad18ed5bb64379759dc6be (diff)
downloadsrc-1689a3c4ac37c707e74fbaff09c732e724cd833b.tar.gz
src-1689a3c4ac37c707e74fbaff09c732e724cd833b.zip
Notes
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-elf/rtld.c157
1 files changed, 79 insertions, 78 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index e41d54768c88..89b0fa4b48dd 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -1591,92 +1591,93 @@ gnu_hash(const char *s)
static char *
find_library(const char *xname, const Obj_Entry *refobj, int *fdp)
{
- char *pathname;
- char *name;
- bool nodeflib, objgiven;
+ char *pathname;
+ char *name;
+ bool nodeflib, objgiven;
- objgiven = refobj != NULL;
+ objgiven = refobj != NULL;
- if (libmap_disable || !objgiven ||
- (name = lm_find(refobj->path, xname)) == NULL)
- name = (char *)xname;
+ if (libmap_disable || !objgiven ||
+ (name = lm_find(refobj->path, xname)) == NULL)
+ name = (char *)xname;
- if (strchr(name, '/') != NULL) { /* Hard coded pathname */
- if (name[0] != '/' && !trust) {
- _rtld_error("Absolute pathname required for shared object \"%s\"",
- name);
- return (NULL);
+ if (strchr(name, '/') != NULL) { /* Hard coded pathname */
+ if (name[0] != '/' && !trust) {
+ _rtld_error("Absolute pathname required "
+ "for shared object \"%s\"", name);
+ return (NULL);
+ }
+ return (origin_subst(__DECONST(Obj_Entry *, refobj),
+ __DECONST(char *, name)));
}
- return (origin_subst(__DECONST(Obj_Entry *, refobj),
- __DECONST(char *, name)));
- }
- dbg(" Searching for \"%s\"", name);
+ dbg(" Searching for \"%s\"", name);
- /*
- * If refobj->rpath != NULL, then refobj->runpath is NULL. Fall
- * back to pre-conforming behaviour if user requested so with
- * LD_LIBRARY_PATH_RPATH environment variable and ignore -z
- * nodeflib.
- */
- if (objgiven && refobj->rpath != NULL && ld_library_path_rpath) {
- pathname = search_library_path(name, ld_library_path);
- if (pathname != NULL)
- return (pathname);
- if (refobj != NULL) {
- pathname = search_library_path(name, refobj->rpath);
- if (pathname != NULL)
- return (pathname);
- }
- pathname = search_library_pathfds(name, ld_library_dirs, fdp);
- if (pathname != NULL)
- return (pathname);
- pathname = search_library_path(name, gethints(false));
- if (pathname != NULL)
- return (pathname);
- pathname = search_library_path(name, ld_standard_library_path);
- if (pathname != NULL)
- return (pathname);
- } else {
- nodeflib = objgiven ? refobj->z_nodeflib : false;
- if (objgiven) {
- pathname = search_library_path(name, refobj->rpath);
- if (pathname != NULL)
- return (pathname);
- }
- if (objgiven && refobj->runpath == NULL && refobj != obj_main) {
- pathname = search_library_path(name, obj_main->rpath);
- if (pathname != NULL)
- return (pathname);
- }
- pathname = search_library_path(name, ld_library_path);
- if (pathname != NULL)
- return (pathname);
- if (objgiven) {
- pathname = search_library_path(name, refobj->runpath);
- if (pathname != NULL)
- return (pathname);
- }
- pathname = search_library_pathfds(name, ld_library_dirs, fdp);
- if (pathname != NULL)
- return (pathname);
- pathname = search_library_path(name, gethints(nodeflib));
- if (pathname != NULL)
- return (pathname);
- if (objgiven && !nodeflib) {
- pathname = search_library_path(name, ld_standard_library_path);
- if (pathname != NULL)
- return (pathname);
+ /*
+ * If refobj->rpath != NULL, then refobj->runpath is NULL. Fall
+ * back to pre-conforming behaviour if user requested so with
+ * LD_LIBRARY_PATH_RPATH environment variable and ignore -z
+ * nodeflib.
+ */
+ if (objgiven && refobj->rpath != NULL && ld_library_path_rpath) {
+ pathname = search_library_path(name, ld_library_path);
+ if (pathname != NULL)
+ return (pathname);
+ if (refobj != NULL) {
+ pathname = search_library_path(name, refobj->rpath);
+ if (pathname != NULL)
+ return (pathname);
+ }
+ pathname = search_library_pathfds(name, ld_library_dirs, fdp);
+ if (pathname != NULL)
+ return (pathname);
+ pathname = search_library_path(name, gethints(false));
+ if (pathname != NULL)
+ return (pathname);
+ pathname = search_library_path(name, ld_standard_library_path);
+ if (pathname != NULL)
+ return (pathname);
+ } else {
+ nodeflib = objgiven ? refobj->z_nodeflib : false;
+ if (objgiven) {
+ pathname = search_library_path(name, refobj->rpath);
+ if (pathname != NULL)
+ return (pathname);
+ }
+ if (objgiven && refobj->runpath == NULL && refobj != obj_main) {
+ pathname = search_library_path(name, obj_main->rpath);
+ if (pathname != NULL)
+ return (pathname);
+ }
+ pathname = search_library_path(name, ld_library_path);
+ if (pathname != NULL)
+ return (pathname);
+ if (objgiven) {
+ pathname = search_library_path(name, refobj->runpath);
+ if (pathname != NULL)
+ return (pathname);
+ }
+ pathname = search_library_pathfds(name, ld_library_dirs, fdp);
+ if (pathname != NULL)
+ return (pathname);
+ pathname = search_library_path(name, gethints(nodeflib));
+ if (pathname != NULL)
+ return (pathname);
+ if (objgiven && !nodeflib) {
+ pathname = search_library_path(name,
+ ld_standard_library_path);
+ if (pathname != NULL)
+ return (pathname);
+ }
}
- }
- if (objgiven && refobj->path != NULL) {
- _rtld_error("Shared object \"%s\" not found, required by \"%s\"",
- name, basename(refobj->path));
- } else {
- _rtld_error("Shared object \"%s\" not found", name);
- }
- return NULL;
+ if (objgiven && refobj->path != NULL) {
+ _rtld_error("Shared object \"%s\" not found, "
+ "required by \"%s\"", name, basename(refobj->path));
+ } else {
+ _rtld_error("Shared object \"%s\" not found", name);
+ }
+ return (NULL);
}
/*