diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-10-08 10:57:10 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-10-08 14:29:49 +0200 |
commit | 27316f4a23efdc90bdfe4569a6c4b7e27941606e (patch) | |
tree | 89958b354e27b96a2dda1315e347b3a548c2be9f /elf | |
parent | 9590a71adcf134c77f2d0f5711b0d6ab1b4193e6 (diff) | |
download | glibc-27316f4a23efdc90bdfe4569a6c4b7e27941606e.tar.gz glibc-27316f4a23efdc90bdfe4569a6c4b7e27941606e.tar.xz glibc-27316f4a23efdc90bdfe4569a6c4b7e27941606e.zip |
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.c | 4 | ||||
-rw-r--r-- | elf/dl-main.h | 5 | ||||
-rw-r--r-- | elf/dl-support.c | 2 | ||||
-rw-r--r-- | elf/rtld.c | 3 |
4 files changed, 10 insertions, 4 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c index 5ba117d597..5fbb8c9ad4 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 b01f433f9c..79c9c40056 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 7704c101c5..afbc94df54 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 ee5bf178af..c0609e4310 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; } |