diff options
author | Jakub Jelinek <jakub@redhat.com> | 2004-10-18 23:30:23 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2004-10-18 23:30:23 +0000 |
commit | e9e4030ae5f685547a9f7ead1362c7526aa88b80 (patch) | |
tree | 5191067336dc7eed72c15bd9ebdcf9e5ec6af35c /dlfcn/dlmopen.c | |
parent | c78cb58c50d04f98c752ee576a0f8e1daae78d38 (diff) |
Updated to fedora-glibc-20041018T0940cvs/fedora-glibc-2_3_3-70
Diffstat (limited to 'dlfcn/dlmopen.c')
-rw-r--r-- | dlfcn/dlmopen.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/dlfcn/dlmopen.c b/dlfcn/dlmopen.c index fb2a50bb1d..5fd6543655 100644 --- a/dlfcn/dlmopen.c +++ b/dlfcn/dlmopen.c @@ -23,6 +23,17 @@ #include <stddef.h> #include <ldsodefs.h> +#if !defined SHARED && defined IS_IN_libdl + +void * +dlmopen (Lmid_t nsid, const char *file, int mode) +{ + return __dlmopen (nsid, file, mode, RETURN_ADDRESS (0)); +} +static_link_warning (dlmopen) + +#else + struct dlmopen_args { /* Namespace ID. */ @@ -43,11 +54,11 @@ dlmopen_doit (void *a) /* Non-shared code has no support for multiple namespaces. */ if (args->nsid != LM_ID_BASE) -#ifdef SHARED +# ifdef SHARED /* If trying to open the link map for the main executable the namespace must be the main one. */ if (args->file == NULL) -#endif +# endif GLRO(dl_signal_error) (EINVAL, NULL, NULL, N_("invalid namespace")); args->new = _dl_open (args->file ?: "", args->mode | __RTLD_DLOPEN, @@ -56,14 +67,32 @@ dlmopen_doit (void *a) void * -dlmopen (Lmid_t nsid, const char *file, int mode) +__dlmopen (Lmid_t nsid, const char *file, int mode DL_CALLER_DECL) { +# ifdef SHARED + if (__builtin_expect (_dlfcn_hook != NULL, 0)) + return _dlfcn_hook->dlmopen (nsid, file, mode, RETURN_ADDRESS (0)); +# endif + struct dlmopen_args args; args.nsid = nsid; args.file = file; args.mode = mode; - args.caller = RETURN_ADDRESS (0); + args.caller = DL_CALLER; +# ifdef SHARED return _dlerror_run (dlmopen_doit, &args) ? NULL : args.new; +# else + if (_dlerror_run (dlmopen_doit, &args)) + return NULL; + + __libc_register_dl_open_hook ((struct link_map *) args.new); + __libc_register_dlfcn_hook ((struct link_map *) args.new); + + return args.new; +# endif } -static_link_warning (dlmopen) +# ifdef SHARED +strong_alias (__dlmopen, dlmopen) +# endif +#endif |