1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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: libc/elf/dl-load.c
- ===================================================================
- --- libc.orig/elf/dl-load.c
- +++ libc/elf/dl-load.c
- @@ -2107,6 +2107,15 @@ _dl_map_object (struct link_map *loader,
- &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 */
- if (fd == -1
- && (__builtin_expect (! (mode & __RTLD_SECURE), 1)
- || ! INTUSE(__libc_enable_secure)))
- @@ -2169,14 +2178,6 @@ _dl_map_object (struct link_map *loader,
- }
- }
-
- - /* Finally, 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);
- -
- /* Add another newline when we are tracing the library loading. */
- if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_LIBS, 0))
- _dl_debug_printf ("\n");
|