From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2178) id E9E34398B84E; Thu, 1 Oct 2020 16:53:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E9E34398B84E Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Florian Weimer To: glibc-cvs@sourceware.org Subject: [glibc/fw/glibc-hwcaps] elf: Record whether paths come from LD_LIBRARY_PATH or --library-path X-Act-Checkin: glibc X-Git-Author: Florian Weimer X-Git-Refname: refs/heads/fw/glibc-hwcaps X-Git-Oldrev: 82d06d8f60646b8f6e7f13ba42668e3ea10e0268 X-Git-Newrev: ab35cf9efe79980a59e58ed59fdadcd8084941be Message-Id: <20201001165340.E9E34398B84E@sourceware.org> Date: Thu, 1 Oct 2020 16:53:40 +0000 (GMT) X-BeenThere: glibc-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Glibc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Oct 2020 16:53:41 -0000 https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ab35cf9efe79980a59e58ed59fdadcd8084941be commit ab35cf9efe79980a59e58ed59fdadcd8084941be Author: Florian Weimer Date: Tue Jun 9 12:33:48 2020 +0200 elf: Record whether paths come from LD_LIBRARY_PATH or --library-path This allows more precise diagnostics. Diff: --- elf/dl-load.c | 4 ++-- elf/dl-main.h | 5 ++++- elf/dl-support.c | 2 +- elf/rtld.c | 3 +++ sysdeps/generic/ldsodefs.h | 6 ++++-- 5 files changed, 14 insertions(+), 6 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 681f366871..68dd27d0d7 100644 --- a/elf/dl-main.h +++ b/elf/dl-main.h @@ -71,6 +71,9 @@ struct dl_main_state /* The library search path. */ const char *library_path; + /* Where library_path comes from. LD_LIBRARY_PATH or --library. */ + const char *library_path_source; + /* The list preloaded objects from LD_PRELOAD. */ const char *preloadlist; @@ -91,7 +94,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 f3e1791e2f..d11fe22b83 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 = 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; } diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 7cb1fccc80..510a2f6841 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -1046,8 +1046,10 @@ rtld_hidden_proto (_dl_debug_state) extern struct r_debug *_dl_debug_initialize (ElfW(Addr) ldbase, Lmid_t ns) attribute_hidden; -/* Initialize the basic data structure for the search paths. */ -extern void _dl_init_paths (const char *library_path) attribute_hidden; +/* Initialize the basic data structure for the search paths. SOURCE + is either "LD_LIBRARY_PATH" or "--library-path". */ +extern void _dl_init_paths (const char *library_path, const char *source) + attribute_hidden; /* Gather the information needed to install the profiling tables and start the timers. */