[RFC PATCH 2/3] glibc: dlopen RTLD_NOLOAD optimization
Daniel Walker
danielwa@cisco.com
Fri Jun 26 19:32:27 GMT 2020
From: Conan C Huang <conhuang@cisco.com>
This is a fix for GLIBC Bugzilla #25615: dlopen RTLD_NOLOAD
optimization
When dlopen with RTLD_NOLOAD flag, loader should simply return the
link_map or NULL and promote flags like RTLD_GLOBAL and RTLD_NODELETE.
Loader shouldn't need to process any dependencies. In dl_open_worker,
loader should avoid calling _dl_map_object_deps. _dl_map_object_deps
is very time consuming on low-end platforms with lots of library
dependencies.
Loader retrains the same functionality during flag promotions:
RTLD_GLOBAL
RTLD_NODELETE
https://sourceware.org/bugzilla/show_bug.cgi?id=25615
---
elf/dl-open.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 9b3606c491..cfef39ec53 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -542,7 +542,9 @@ dl_open_worker (void *a)
++new->l_direct_opencount;
/* It was already open. */
- if (__glibc_unlikely (new->l_searchlist.r_list != NULL))
+ if (__glibc_unlikely (new->l_searchlist.r_list != NULL) ||
+ (__glibc_unlikely (mode & RTLD_NOLOAD) &&
+ __glibc_unlikely (!(mode & RTLD_GLOBAL))))
{
/* Let the user know about the opencount. */
if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_FILES))
--
2.17.1
More information about the Libc-alpha
mailing list