aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2020-10-08 10:57:10 +0200
committerFlorian Weimer <fweimer@redhat.com>2020-10-08 14:29:49 +0200
commit27316f4a23efdc90bdfe4569a6c4b7e27941606e (patch)
tree89958b354e27b96a2dda1315e347b3a548c2be9f /elf
parent9590a71adcf134c77f2d0f5711b0d6ab1b4193e6 (diff)
downloadglibc-27316f4a23efdc90bdfe4569a6c4b7e27941606e.zip
glibc-27316f4a23efdc90bdfe4569a6c4b7e27941606e.tar.gz
glibc-27316f4a23efdc90bdfe4569a6c4b7e27941606e.tar.bz2
elf: Record whether paths come from LD_LIBRARY_PATH or --library-path
This allows more precise LD_DEBUG diagnostics. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-load.c4
-rw-r--r--elf/dl-main.h5
-rw-r--r--elf/dl-support.c2
-rw-r--r--elf/rtld.c3
4 files changed, 10 insertions, 4 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 5ba117d..5fbb8c9 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -682,7 +682,7 @@ cache_rpath (struct link_map *l,
void
-_dl_init_paths (const char *llp)
+_dl_init_paths (const char *llp, const char *source)
{
size_t idx;
const char *strp;
@@ -820,7 +820,7 @@ _dl_init_paths (const char *llp)
}
(void) fillin_rpath (llp_tmp, env_path_list.dirs, ":;",
- "LD_LIBRARY_PATH", NULL, l);
+ source, NULL, l);
if (env_path_list.dirs[0] == NULL)
{
diff --git a/elf/dl-main.h b/elf/dl-main.h
index b01f433..79c9c40 100644
--- a/elf/dl-main.h
+++ b/elf/dl-main.h
@@ -74,6 +74,9 @@ struct dl_main_state
/* The library search path. */
const char *library_path;
+ /* Where library_path comes from. LD_LIBRARY_PATH or --library-path. */
+ const char *library_path_source;
+
/* The list preloaded objects from LD_PRELOAD. */
const char *preloadlist;
@@ -94,7 +97,7 @@ struct dl_main_state
static inline void
call_init_paths (const struct dl_main_state *state)
{
- _dl_init_paths (state->library_path);
+ _dl_init_paths (state->library_path, state->library_path_source);
}
/* Print ld.so usage information and exit. */
diff --git a/elf/dl-support.c b/elf/dl-support.c
index 7704c10..afbc94d 100644
--- a/elf/dl-support.c
+++ b/elf/dl-support.c
@@ -323,7 +323,7 @@ _dl_non_dynamic_init (void)
/* Initialize the data structures for the search paths for shared
objects. */
- _dl_init_paths (getenv ("LD_LIBRARY_PATH"));
+ _dl_init_paths (getenv ("LD_LIBRARY_PATH"), "LD_LIBRARY_PATH");
/* Remember the last search directory added at startup. */
_dl_init_all_dirs = GL(dl_all_dirs);
diff --git a/elf/rtld.c b/elf/rtld.c
index ee5bf17..c0609e4 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -286,6 +286,7 @@ dl_main_state_init (struct dl_main_state *state)
{
audit_list_init (&state->audit_list);
state->library_path = NULL;
+ state->library_path_source = NULL;
state->preloadlist = NULL;
state->preloadarg = NULL;
state->mode = rtld_mode_normal;
@@ -1203,6 +1204,7 @@ dl_main (const ElfW(Phdr) *phdr,
&& _dl_argc > 2)
{
state.library_path = _dl_argv[2];
+ state.library_path_source = "--library-path";
_dl_skip_args += 2;
_dl_argc -= 2;
@@ -2655,6 +2657,7 @@ process_envvars (struct dl_main_state *state)
&& memcmp (envline, "LIBRARY_PATH", 12) == 0)
{
state->library_path = &envline[13];
+ state->library_path_source = "LD_LIBRARY_PATH";
break;
}