57 lines
2.2 KiB
Diff
57 lines
2.2 KiB
Diff
Upstream-Status: Inappropriate [embedded specific]
|
|
|
|
The default lib search path order is:
|
|
|
|
1) LD_LIBRARY_PATH
|
|
2) RPATH from the binary
|
|
3) ld.so.cache
|
|
4) default search paths embedded in the linker
|
|
|
|
For nativesdk binaries which are being used alongside binaries on a host system, we
|
|
need the search paths to firstly search the shipped nativesdk libs but then also
|
|
cover the host system. For example we want the host system's libGL and this may be
|
|
in a non-standard location like /usr/lib/mesa. The only place the location is know
|
|
about is in the ld.so.cache of the host system.
|
|
|
|
Since nativesdk has a simple structure and doesn't need to use a cache itself, we
|
|
repurpose the cache for use as a last resort in finding host system binaries. This
|
|
means we need to switch the order of 3 and 4 above to make this work effectively.
|
|
|
|
RP 14/10/2010
|
|
|
|
Index: git/elf/dl-load.c
|
|
===================================================================
|
|
--- git.orig/elf/dl-load.c 2014-08-28 17:32:46.292070587 -0700
|
|
+++ git/elf/dl-load.c 2014-08-28 17:33:56.048070587 -0700
|
|
@@ -2050,7 +2050,14 @@
|
|
fd = open_path (name, namelen, mode,
|
|
&loader->l_runpath_dirs, &realname, &fb, loader,
|
|
LA_SER_RUNPATH, &found_other_class);
|
|
-
|
|
+ /* try the default path. */
|
|
+ if (fd == -1
|
|
+ && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
|
|
+ || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1))
|
|
+ && rtld_search_dirs.dirs != (void *) -1)
|
|
+ fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs,
|
|
+ &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
|
|
+ /* Finally try ld.so.cache */
|
|
#ifdef USE_LDCONFIG
|
|
if (fd == -1
|
|
&& (__glibc_likely ((mode & __RTLD_SECURE) == 0)
|
|
@@ -2113,14 +2120,6 @@
|
|
}
|
|
#endif
|
|
|
|
- /* Finally, try the default path. */
|
|
- if (fd == -1
|
|
- && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
|
|
- || __glibc_likely (!(l->l_flags_1 & DF_1_NODEFLIB)))
|
|
- && rtld_search_dirs.dirs != (void *) -1)
|
|
- fd = open_path (name, namelen, mode, &rtld_search_dirs,
|
|
- &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
|
|
-
|
|
/* Add another newline when we are tracing the library loading. */
|
|
if (__glibc_unlikely (GLRO_dl_debug_mask & DL_DEBUG_LIBS))
|
|
_dl_debug_printf ("\n");
|