diff options
author | Maciej W. Rozycki <macro@codesourcery.com> | 2014-01-31 17:51:31 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@codesourcery.com> | 2014-01-31 17:51:31 +0000 |
commit | 0d23a5c1b1908700d25b7e3c6cece148e19dded4 (patch) | |
tree | 68076816a4d5e06e01bdc0efdb433f613bb61e62 /elf/dl-load.c | |
parent | 0037bb6010522e20dde2da7922071d5cb53f67eb (diff) | |
download | glibc-0d23a5c1b1908700d25b7e3c6cece148e19dded4.tar.gz glibc-0d23a5c1b1908700d25b7e3c6cece148e19dded4.tar.xz glibc-0d23a5c1b1908700d25b7e3c6cece148e19dded4.zip |
[BZ #16046] Static dlopen correction fallout fixes.
Fixes to address issues from BZ #15022 resolution, as follows: * TLS updates to csu/libc-tls.c -- we now have a proper main map, so there's no longer a need to create a separate fake one to keep TLS structures, * random updates to elf/dl-close.c -- LM_ID_BASE is now a valid name space ID for static executables as well, so assert that we don't unload the main map. Similarly dl_nns isn't supposed to be 0 for static executables anymore, * actual BZ #16046 fix to elf/dl-iteratephdr.c -- the dl_iterate_phdr special function for static executables isn't needed anymore, provided that l_phdr and l_phnum members of the main map have been properly initialized (done in _dl_non_dynamic_init in elf/dl-support.c now), * ld.so.cache loader update to elf/dl-load.c -- GL(dl_ns)[LM_ID_BASE]._ns_loaded is now always initialized in static executables so can become the fallback loader map to check for DF_1_NODEFLIB, provided that the l_flags_1 member of the main map has been properly initialized (done in elf/dl-support.c now); this also ensures previous semantics elsewhere in elf/dl-load.c, * matching updates to elf/dl-support.c -- to complement the two fixes above.
Diffstat (limited to 'elf/dl-load.c')
-rw-r--r-- | elf/dl-load.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c index ee12f329d8..1be7a3ca96 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -2233,23 +2233,17 @@ _dl_map_object (struct link_map *loader, const char *name, if (cached != NULL) { -# 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 - l = loader; +# ifdef SHARED + ?: &GL(dl_rtld_map) # 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 - /* 'l' is always != NULL for dynamically linked objects. */ - l != NULL && -# endif - __builtin_expect (l->l_flags_1 & DF_1_NODEFLIB, 0)) + if (__builtin_expect (l->l_flags_1 & DF_1_NODEFLIB, 0)) { const char *dirp = system_dirs; unsigned int cnt = 0; |