mirror of
git://sourceware.org/git/glibc.git
synced 2025-04-24 14:41:06 +08:00
New ld.so argument --inhibit-ldcache to disable ld.so.cache lookup
It may sometimes be desirable to make the dynamic linker only pick up libraries from the library path and rpath and not look at the ld.so.cache that ldconfig generates. An example of such a use case is the glibc testsuite where the dynamic linker must not be influenced by any external paths or caches. This change adds a new option --inhibit-ldcache that when used, tells the dynamic linker to not use ld.so.cache even if it is available.
This commit is contained in:
parent
d715c9144b
commit
73d65cc378
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
2012-04-10 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||
|
||||
* elf/dl-support.c (_dl_inhibit_cache): New variable.
|
||||
* elf/rtld.c (_rtld_global_ro): New member _dl_inhibit_cache.
|
||||
(dl_main): Handle --inhibit-cache.
|
||||
* sysdeps/generic/ldsodefs.h (struct rtld_global_ro): New member
|
||||
_dl_inhibit_cache.
|
||||
* elf/dl-load.c (_dl_map_object): Use it.
|
||||
* elf/Makefile: Define SYSCONFDIR when building rtld.c.
|
||||
|
||||
2012-04-09 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #13872]
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1995-2011, 2012 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1995-2012 Free Software Foundation, Inc.
|
||||
# This file is part of the GNU C Library.
|
||||
|
||||
# The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -419,6 +419,7 @@ CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
|
||||
-D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1
|
||||
CFLAGS-dl-cache.c = $(SYSCONF-FLAGS)
|
||||
CFLAGS-cache.c = $(SYSCONF-FLAGS)
|
||||
CFLAGS-rtld.c = $(SYSCONF-FLAGS)
|
||||
|
||||
CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),-DNOT_IN_libc=1 -DIS_IN_rtld=1)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Map in a shared object's segments from the file.
|
||||
Copyright (C) 1995-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-2012 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -2194,7 +2194,8 @@ _dl_map_object (struct link_map *loader, const char *name,
|
||||
|
||||
if (fd == -1
|
||||
&& (__builtin_expect (! (mode & __RTLD_SECURE), 1)
|
||||
|| ! INTUSE(__libc_enable_secure)))
|
||||
|| ! INTUSE(__libc_enable_secure))
|
||||
&& __builtin_expect (GLRO(dl_inhibit_cache) == 0, 1))
|
||||
{
|
||||
/* Check the list of libraries in the file /etc/ld.so.cache,
|
||||
for compatibility with Linux's ldconfig program. */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Support for dynamic linking code in static libc.
|
||||
Copyright (C) 1996-2008,2009,2010,2011 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996-2012 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -107,6 +107,8 @@ void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls;
|
||||
|
||||
size_t _dl_pagesize = EXEC_PAGESIZE;
|
||||
|
||||
int _dl_inhibit_cache;
|
||||
|
||||
unsigned int _dl_osversion;
|
||||
|
||||
/* All known directories in sorted order. */
|
||||
|
@ -161,6 +161,7 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
|
||||
._dl_fpu_control = _FPU_DEFAULT,
|
||||
._dl_pointer_guard = 1,
|
||||
._dl_pagesize = EXEC_PAGESIZE,
|
||||
._dl_inhibit_cache = 0,
|
||||
|
||||
/* Function pointers. */
|
||||
._dl_debug_printf = _dl_debug_printf,
|
||||
@ -969,6 +970,13 @@ dl_main (const ElfW(Phdr) *phdr,
|
||||
{
|
||||
mode = verify;
|
||||
|
||||
++_dl_skip_args;
|
||||
--_dl_argc;
|
||||
++INTUSE(_dl_argv);
|
||||
}
|
||||
else if (! strcmp (INTUSE(_dl_argv)[1], "--inhibit-cache"))
|
||||
{
|
||||
GLRO(dl_inhibit_cache) = 1;
|
||||
++_dl_skip_args;
|
||||
--_dl_argc;
|
||||
++INTUSE(_dl_argv);
|
||||
@ -1022,6 +1030,7 @@ of this helper program; chances are you did not intend to run this program.\n\
|
||||
--list list all dependencies and how they are resolved\n\
|
||||
--verify verify that given object really is a dynamically linked\n\
|
||||
object we can handle\n\
|
||||
--inhibit-cache Do not use " LD_SO_CACHE "\n\
|
||||
--library-path PATH use given PATH instead of content of the environment\n\
|
||||
variable LD_LIBRARY_PATH\n\
|
||||
--inhibit-rpath LIST ignore RUNPATH and RPATH information in object names\n\
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Run-time dynamic linker data structures for loaded ELF shared objects.
|
||||
Copyright (C) 1995-2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-2012 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -560,6 +560,9 @@ struct rtld_global_ro
|
||||
/* Cached value of `getpagesize ()'. */
|
||||
EXTERN size_t _dl_pagesize;
|
||||
|
||||
/* Do we read from ld.so.cache? */
|
||||
EXTERN int _dl_inhibit_cache;
|
||||
|
||||
/* Copy of the content of `_dl_main_searchlist' at startup time. */
|
||||
EXTERN struct r_scope_elem _dl_initial_searchlist;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user