diff options
Diffstat (limited to 'elf')
-rw-r--r-- | elf/Makefile | 9 | ||||
-rw-r--r-- | elf/dl-load.c | 12 | ||||
-rw-r--r-- | elf/dl-open.c | 4 | ||||
-rw-r--r-- | elf/rtld.c | 2 |
4 files changed, 16 insertions, 11 deletions
diff --git a/elf/Makefile b/elf/Makefile index 2eb12d37de..58cc15c3f1 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -19,6 +19,8 @@ subdir := elf +include ../Makeconfig + headers = elf.h bits/elfclass.h link.h bits/link.h routines = $(dl-routines) dl-support dl-iteratephdr \ dl-addr enbl-secure dl-profstub \ @@ -26,10 +28,13 @@ routines = $(dl-routines) dl-support dl-iteratephdr \ # The core dynamic linking functions are in libc for the static and # profiled libraries. -dl-routines = $(addprefix dl-,load cache lookup object reloc deps \ +dl-routines = $(addprefix dl-,load lookup object reloc deps \ runtime error init fini debug misc \ version profile conflict tls origin scope \ execstack caller open close trampoline) +ifeq (yes,$(use-ldconfig)) +dl-routines += dl-cache +endif all-dl-routines = $(dl-routines) $(sysdep-dl-routines) # But they are absent from the shared libc, because that code is in ld.so. elide-routines.os = $(all-dl-routines) dl-support enbl-secure dl-origin \ @@ -45,8 +50,6 @@ CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-dl-iterate-phdr.c = $(uses-callbacks) -include ../Makeconfig - ifeq ($(unwind-find-fde),yes) routines += unwind-dw2-fde-glibc shared-only-routines += unwind-dw2-fde-glibc diff --git a/elf/dl-load.c b/elf/dl-load.c index ea31417bda..0bfa74a25e 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -2197,6 +2197,7 @@ _dl_map_object (struct link_map *loader, const char *name, &loader->l_runpath_dirs, &realname, &fb, loader, LA_SER_RUNPATH, &found_other_class); +#ifdef USE_LDCONFIG if (fd == -1 && (__builtin_expect (! (mode & __RTLD_SECURE), 1) || ! INTUSE(__libc_enable_secure)) @@ -2208,22 +2209,22 @@ _dl_map_object (struct link_map *loader, const char *name, if (cached != NULL) { -#ifdef SHARED +# ifdef SHARED // XXX Correct to unconditionally default to namespace 0? l = (loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded ?: &GL(dl_rtld_map)); -#else +# else l = loader; -#endif +# endif /* If the loader has the DF_1_NODEFLIB flag set we must not use a cache entry from any of these directories. */ if ( -#ifndef SHARED +# ifndef SHARED /* 'l' is always != NULL for dynamically linked objects. */ l != NULL && -#endif +# endif __builtin_expect (l->l_flags_1 & DF_1_NODEFLIB, 0)) { const char *dirp = system_dirs; @@ -2261,6 +2262,7 @@ _dl_map_object (struct link_map *loader, const char *name, } } } +#endif /* Finally, try the default path. */ if (fd == -1 diff --git a/elf/dl-open.c b/elf/dl-open.c index 0bc447aae0..5149e578b1 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -654,8 +654,8 @@ no more namespaces available for dlmopen()")); int errcode = _dl_catch_error (&objname, &errstring, &malloced, dl_open_worker, &args); -#ifndef MAP_COPY - /* We must munmap() the cache file. */ +#if defined USE_LDCONFIG && !defined MAP_COPY + /* We must unmap the cache file. */ _dl_unload_cache (); #endif diff --git a/elf/rtld.c b/elf/rtld.c index ed5d06298e..8a0264504b 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -2400,7 +2400,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", _dl_debug_state (); LIBC_PROBE (init_complete, 2, LM_ID_BASE, r); -#ifndef MAP_COPY +#if defined USE_LDCONFIG && !defined MAP_COPY /* We must munmap() the cache file. */ _dl_unload_cache (); #endif |