diff options
author | Alexey Neyman <stilor@att.net> | 2017-03-14 23:24:14 -0700 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2017-03-17 19:20:40 +0100 |
commit | 2e4d3492e6627fc9d4c34de104a6ebe6f84ac1e9 (patch) | |
tree | 017b5ed2630fd668a4813388c84f75bef95130db /ldso | |
parent | 6458e8278c9317f8254eeca9aaf86ce60f3a257b (diff) |
Search the configured multilib
... before falling back to ld.so installation path (it is not the same -
gcc uses /lib/ld-uClibc-x86-64.so.0 for uClibc) or default /lib:/usr/lib.
This matches glibc behavior (see trusted-dirs.h generated during glibc
build).
Signed-off-by: Alexey Neyman <stilor@att.net>
Diffstat (limited to 'ldso')
-rw-r--r-- | ldso/ldso/Makefile.in | 5 | ||||
-rw-r--r-- | ldso/ldso/dl-elf.c | 14 |
2 files changed, 19 insertions, 0 deletions
diff --git a/ldso/ldso/Makefile.in b/ldso/ldso/Makefile.in index 993aeb9d9..320e4488b 100644 --- a/ldso/ldso/Makefile.in +++ b/ldso/ldso/Makefile.in @@ -34,6 +34,11 @@ CFLAGS-$(DODEBUG)-ldso/ldso := -O2 -g CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" +# Search non-default multilib directories +ifneq ($(MULTILIB_DIR),lib) +CFLAGS-ldso.c += -DLDSO_MULTILIB_DIR=\"$(MULTILIB_DIR)\" +endif + ifeq ($(TARGET_ARCH),arc) CFLAGS-ldso.c += -mno-long-calls endif diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c index a046aeb74..4b3d86e78 100644 --- a/ldso/ldso/dl-elf.c +++ b/ldso/ldso/dl-elf.c @@ -307,6 +307,19 @@ struct elf_resolve *_dl_load_shared_library(unsigned int rflags, struct dyn_elf } } #endif + +#ifdef LDSO_MULTILIB_DIR + /* If multilib directory is selected, search it before falling back to + standard lib directories. */ + _dl_if_debug_dprint("\tsearching multilib lib path list\n"); + tpnt1 = search_for_named_library(libname, rflags, + UCLIBC_RUNTIME_PREFIX LDSO_MULTILIB_DIR ":" + UCLIBC_RUNTIME_PREFIX "usr" LDSO_MULTILIB_DIR, + rpnt, NULL); + if (tpnt1 != NULL) + return tpnt1; +#endif + #if defined SHARED && defined __LDSO_SEARCH_INTERP_PATH__ /* Look for libraries wherever the shared library loader * was installed */ @@ -315,6 +328,7 @@ struct elf_resolve *_dl_load_shared_library(unsigned int rflags, struct dyn_elf if (tpnt1 != NULL) return tpnt1; #endif + /* Lastly, search the standard list of paths for the library. This list must exactly match the list in uClibc/ldso/util/ldd.c */ _dl_if_debug_dprint("\tsearching full lib path list\n"); |