blob: 4eb23bd0e56a11919129aae7703f0dbf5aee49b2 [file] [log] [blame]
Patrick Williams92b42cb2022-09-03 06:53:57 -05001From a74ac72e6a25121c99f3875cf0245a435729e897 Mon Sep 17 00:00:00 2001
Andrew Geissler82c905d2020-04-13 13:39:40 -05002From: Khem Raj <raj.khem@gmail.com>
3Date: Wed, 18 Mar 2015 01:48:24 +0000
Andrew Geisslerd1e89492021-02-12 15:35:20 -06004Subject: [PATCH] nativesdk-glibc: Look for host system ld.so.cache as well
Andrew Geissler82c905d2020-04-13 13:39:40 -05005
6Upstream-Status: Inappropriate [embedded specific]
7
8The default lib search path order is:
9
10 1) LD_LIBRARY_PATH
11 2) RPATH from the binary
12 3) ld.so.cache
13 4) default search paths embedded in the linker
14
15For nativesdk binaries which are being used alongside binaries on a host system, we
16need the search paths to firstly search the shipped nativesdk libs but then also
17cover the host system. For example we want the host system's libGL and this may be
18in a non-standard location like /usr/lib/mesa. The only place the location is know
19about is in the ld.so.cache of the host system.
20
21Since nativesdk has a simple structure and doesn't need to use a cache itself, we
22repurpose the cache for use as a last resort in finding host system binaries. This
23means we need to switch the order of 3 and 4 above to make this work effectively.
24
25RP 14/10/2010
26
27Signed-off-by: Khem Raj <raj.khem@gmail.com>
28---
29 elf/dl-load.c | 16 ++++++++--------
30 1 file changed, 8 insertions(+), 8 deletions(-)
31
32diff --git a/elf/dl-load.c b/elf/dl-load.c
Patrick Williams92b42cb2022-09-03 06:53:57 -050033index 1ad0868dad..c5e235d918 100644
Andrew Geissler82c905d2020-04-13 13:39:40 -050034--- a/elf/dl-load.c
35+++ b/elf/dl-load.c
Patrick Williams92b42cb2022-09-03 06:53:57 -050036@@ -2109,6 +2109,14 @@ _dl_map_object (struct link_map *loader, const char *name,
Andrew Geissler82c905d2020-04-13 13:39:40 -050037 }
38 }
39
40+ /* try the default path. */
41+ if (fd == -1
42+ && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
43+ || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1))
Andrew Geisslerd1e89492021-02-12 15:35:20 -060044+ && __rtld_search_dirs.dirs != (void *) -1)
45+ fd = open_path (name, namelen, mode & __RTLD_SECURE, &__rtld_search_dirs,
Andrew Geissler82c905d2020-04-13 13:39:40 -050046+ &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
47+ /* Finally try ld.so.cache */
48 #ifdef USE_LDCONFIG
49 if (fd == -1
50 && (__glibc_likely ((mode & __RTLD_SECURE) == 0)
Patrick Williams92b42cb2022-09-03 06:53:57 -050051@@ -2167,14 +2175,6 @@ _dl_map_object (struct link_map *loader, const char *name,
Andrew Geissler82c905d2020-04-13 13:39:40 -050052 }
53 #endif
54
55- /* Finally, try the default path. */
56- if (fd == -1
57- && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
58- || __glibc_likely (!(l->l_flags_1 & DF_1_NODEFLIB)))
Andrew Geisslerd1e89492021-02-12 15:35:20 -060059- && __rtld_search_dirs.dirs != (void *) -1)
60- fd = open_path (name, namelen, mode, &__rtld_search_dirs,
Andrew Geissler82c905d2020-04-13 13:39:40 -050061- &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
62-
63 /* Add another newline when we are tracing the library loading. */
64 if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
65 _dl_debug_printf ("\n");