aboutsummaryrefslogtreecommitdiff
path: root/dlfcn/dlerror.c
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2021-06-03 08:26:04 +0200
committerFlorian Weimer <fweimer@redhat.com>2021-06-03 09:12:05 +0200
commit466c1ea15f461edb8e3ffaf5d86d708876343bbf (patch)
tree43d42d322ff24bd12c4124a9edafc4e0e4232f0a /dlfcn/dlerror.c
parent9c76debc983e1a16e2e723b36526826713a671af (diff)
downloadglibc-466c1ea15f461edb8e3ffaf5d86d708876343bbf.zip
glibc-466c1ea15f461edb8e3ffaf5d86d708876343bbf.tar.gz
glibc-466c1ea15f461edb8e3ffaf5d86d708876343bbf.tar.bz2
dlfcn: Rework static dlopen hooks
Consolidate all hooks structures into a single one. There are no static dlopen ABI concerns because glibc 2.34 already comes with substantial ABI-incompatible changes in this area. (Static dlopen requires the exact same dynamic glibc version that was used for static linking.) The new approach uses a pointer to the hooks structure into _rtld_global_ro and initalizes it in __rtld_static_init. This avoids a back-and-forth with various callback functions. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'dlfcn/dlerror.c')
-rw-r--r--dlfcn/dlerror.c32
1 files changed, 1 insertions, 31 deletions
diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
index 3df8602..d0194a7 100644
--- a/dlfcn/dlerror.c
+++ b/dlfcn/dlerror.c
@@ -33,7 +33,7 @@ __dlerror (void)
{
# ifdef SHARED
if (!rtld_active ())
- return _dlfcn_hook->dlerror ();
+ return GLRO (dl_dlfcn_hook)->dlerror ();
# endif
struct dl_action_result *result = __libc_dlerror_result;
@@ -197,33 +197,3 @@ _dlerror_run (void (*operate) (void *), void *args)
}
}
libc_hidden_def (_dlerror_run)
-
-#ifdef SHARED
-struct dlfcn_hook *_dlfcn_hook __attribute__((nocommon));
-libc_hidden_data_def (_dlfcn_hook)
-
-#else /* !SHARED */
-
-static struct dlfcn_hook _dlfcn_hooks =
- {
- .dlopen = __dlopen,
- .dlclose = __dlclose,
- .dlsym = __dlsym,
- .dlvsym = __dlvsym,
- .dlerror = __dlerror,
- .dladdr = __dladdr,
- .dladdr1 = __dladdr1,
- .dlinfo = __dlinfo,
- .dlmopen = __dlmopen
- };
-
-void
-__libc_register_dlfcn_hook (struct link_map *map)
-{
- struct dlfcn_hook **hook;
-
- hook = (struct dlfcn_hook **) __libc_dlsym_private (map, "_dlfcn_hook");
- if (hook != NULL)
- *hook = &_dlfcn_hooks;
-}
-#endif /* !SHARED */