diff options
68 files changed, 104 insertions, 66 deletions
diff --git a/dlfcn/Makefile b/dlfcn/Makefile index 994a3afee6..b194762d3e 100644 --- a/dlfcn/Makefile +++ b/dlfcn/Makefile @@ -21,11 +21,13 @@ include ../Makeconfig headers := bits/dlfcn.h dlfcn.h extra-libs := libdl -libdl-routines := dlopen dlclose dlsym dlvsym dlerror dladdr dladdr1 dlinfo \ +libdl-routines := dlopen dlclose dlsym dlvsym dladdr dladdr1 dlinfo \ dlmopen dlfcn routines := $(patsubst %,s%,$(filter-out dlfcn,$(libdl-routines))) elide-routines.os := $(routines) -routines += libc_dlerror_result +routines += \ + dlerror \ + libc_dlerror_result \ extra-libs-others := libdl diff --git a/dlfcn/Versions b/dlfcn/Versions index f07cb929aa..76049e1c6a 100644 --- a/dlfcn/Versions +++ b/dlfcn/Versions @@ -1,11 +1,22 @@ libc { + GLIBC_2.0 { + dlerror; + } + GLIBC_2.34 { + dlerror; + } GLIBC_PRIVATE { __libc_dlerror_result; + _dlerror_run; + _dlfcn_hook; } } libdl { GLIBC_2.0 { - dladdr; dlclose; dlerror; dlopen; dlsym; + dladdr; + dlclose; + dlopen; + dlsym; } GLIBC_2.1 { dlopen; dlvsym; @@ -16,7 +27,4 @@ libdl { GLIBC_2.3.4 { dlmopen; } - GLIBC_PRIVATE { - _dlfcn_hook; - } } diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c index 7db70a26d0..3df8602f4d 100644 --- a/dlfcn/dlerror.c +++ b/dlfcn/dlerror.c @@ -28,16 +28,6 @@ #include <assert.h> #include <dlerror.h> -#if !defined SHARED && IS_IN (libdl) - -char * -dlerror (void) -{ - return __dlerror (); -} - -#else - char * __dlerror (void) { @@ -86,11 +76,15 @@ __dlerror (void) result->objname[0] == '\0' ? "" : ": ", _(result->errstring)); else - n = __asprintf (&buf, "%s%s%s: %s", - result->objname, - result->objname[0] == '\0' ? "" : ": ", - _(result->errstring), - strerror (result->errcode)); + { + __set_errno (result->errcode); + n = __asprintf (&buf, "%s%s%s: %m", + result->objname, + result->objname[0] == '\0' ? "" : ": ", + _(result->errstring)); + /* Set errno again in case asprintf clobbered it. */ + __set_errno (result->errcode); + } /* Mark the error as delivered. */ result->returned = true; @@ -108,9 +102,11 @@ __dlerror (void) existing string as a fallback. */ return result->errstring; } -# ifdef SHARED -strong_alias (__dlerror, dlerror) -# endif +versioned_symbol (libc, __dlerror, dlerror, GLIBC_2_34); + +#if OTHER_SHLIB_COMPAT (libdl, GLIBC_2_0, GLIBC_2_34) +compat_symbol (libdl, __dlerror, dlerror, GLIBC_2_0); +#endif int _dlerror_run (void (*operate) (void *), void *args) @@ -200,13 +196,13 @@ _dlerror_run (void (*operate) (void *), void *args) return 1; } } +libc_hidden_def (_dlerror_run) -# ifdef SHARED - +#ifdef SHARED struct dlfcn_hook *_dlfcn_hook __attribute__((nocommon)); -libdl_hidden_data_def (_dlfcn_hook) +libc_hidden_data_def (_dlfcn_hook) -# else +#else /* !SHARED */ static struct dlfcn_hook _dlfcn_hooks = { @@ -230,5 +226,4 @@ __libc_register_dlfcn_hook (struct link_map *map) if (hook != NULL) *hook = &_dlfcn_hooks; } -# endif -#endif +#endif /* !SHARED */ diff --git a/dlfcn/sdlerror.c b/dlfcn/sdlerror.c deleted file mode 100644 index f1226a48c5..0000000000 --- a/dlfcn/sdlerror.c +++ /dev/null @@ -1 +0,0 @@ -#include "dlerror.c" diff --git a/include/dlfcn.h b/include/dlfcn.h index a8d48bdada..a92b2aefb8 100644 --- a/include/dlfcn.h +++ b/include/dlfcn.h @@ -96,8 +96,8 @@ extern void *_dl_vsym (void *handle, const char *name, const char *version, _dl_catch_error. Returns zero for success, nonzero for failure; and arranges for `dlerror' to return the error details. ARGS is passed as argument to OPERATE. */ -extern int _dlerror_run (void (*operate) (void *), void *args) - attribute_hidden; +extern int _dlerror_run (void (*operate) (void *), void *args); +libc_hidden_proto (_dlerror_run) #ifdef SHARED # define DL_CALLER_DECL /* Nothing */ @@ -124,7 +124,7 @@ struct dlfcn_hook }; extern struct dlfcn_hook *_dlfcn_hook; -libdl_hidden_proto (_dlfcn_hook) +libc_hidden_proto (_dlfcn_hook) extern void *__dlopen (const char *file, int mode DL_CALLER_DECL) attribute_hidden; @@ -137,8 +137,6 @@ extern void *__dlsym (void *handle, const char *name DL_CALLER_DECL) extern void *__dlvsym (void *handle, const char *name, const char *version DL_CALLER_DECL) attribute_hidden; -extern char *__dlerror (void) - attribute_hidden; extern int __dladdr (const void *address, Dl_info *info) attribute_hidden; extern int __dladdr1 (const void *address, Dl_info *info, diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index 49aa809366..4c62bf215f 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -741,6 +741,7 @@ GLIBC_2.2.6 dirfd F GLIBC_2.2.6 dirname F GLIBC_2.2.6 div F GLIBC_2.2.6 dl_iterate_phdr F +GLIBC_2.2.6 dlerror F GLIBC_2.2.6 dngettext F GLIBC_2.2.6 dprintf F GLIBC_2.2.6 drand48 F @@ -2207,6 +2208,7 @@ GLIBC_2.33 stat64 F GLIBC_2.34 __isnanf128 F GLIBC_2.34 __libc_start_main F GLIBC_2.34 _hurd_libc_proc_init F +GLIBC_2.34 dlerror F GLIBC_2.34 execveat F GLIBC_2.34 timespec_getres F GLIBC_2.4 __confstr_chk F diff --git a/sysdeps/mach/hurd/i386/libdl.abilist b/sysdeps/mach/hurd/i386/libdl.abilist index 27d133bb7b..1073ce7845 100644 --- a/sysdeps/mach/hurd/i386/libdl.abilist +++ b/sysdeps/mach/hurd/i386/libdl.abilist |
