aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dlfcn/Makefile3
-rw-r--r--dlfcn/Versions4
-rw-r--r--dlfcn/dlfcn.c6
-rw-r--r--dlfcn/dlinfo.c45
-rw-r--r--dlfcn/sdlinfo.c1
-rw-r--r--include/dlfcn.h2
-rw-r--r--sysdeps/mach/hurd/i386/libc.abilist2
-rw-r--r--sysdeps/mach/hurd/i386/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/arc/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/arc/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/csky/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/csky/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/i386/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/i386/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/ia64/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/ia64/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libdl.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libdl.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libdl.abilist1
69 files changed, 120 insertions, 54 deletions
diff --git a/dlfcn/Makefile b/dlfcn/Makefile
index 1dfa247538..c65cdc2e2b 100644
--- a/dlfcn/Makefile
+++ b/dlfcn/Makefile
@@ -21,7 +21,7 @@ include ../Makeconfig
headers := bits/dlfcn.h dlfcn.h
extra-libs := libdl
-libdl-routines := dlopen dlvsym dlinfo \
+libdl-routines := dlopen dlvsym \
dlfcn
routines := $(patsubst %,s%,$(filter-out dlfcn,$(libdl-routines)))
elide-routines.os := $(routines)
@@ -30,6 +30,7 @@ routines += \
dladdr1 \
dlclose \
dlerror \
+ dlinfo \
dlmopen \
dlsym \
libc_dlerror_result \
diff --git a/dlfcn/Versions b/dlfcn/Versions
index acd9402b34..ca9a3e5591 100644
--- a/dlfcn/Versions
+++ b/dlfcn/Versions
@@ -7,6 +7,7 @@ libc {
}
GLIBC_2.3.3 {
dladdr1;
+ dlinfo;
}
GLIBC_2.3.4 {
dlmopen;
@@ -16,6 +17,7 @@ libc {
dladdr;
dlclose;
dlerror;
+ dlinfo;
dlmopen;
dlsym;
}
@@ -33,7 +35,7 @@ libdl {
dlopen; dlvsym;
}
GLIBC_2.3.3 {
- dlinfo;
+ __libdl_version_placeholder;
}
GLIBC_2.3.4 {
__libdl_version_placeholder;
diff --git a/dlfcn/dlfcn.c b/dlfcn/dlfcn.c
index 90cdee0903..55ecfcabbe 100644
--- a/dlfcn/dlfcn.c
+++ b/dlfcn/dlfcn.c
@@ -48,6 +48,12 @@ __libdl_version_placeholder_1 (void)
{
}
+#if SHLIB_COMPAT (libdl, GLIBC_2_3_3, GLIBC_2_34) \
+ && ABI_libdl_GLIBC_2_3_3 != ABI_libdl_GLIBC_2_1
+compat_symbol (libdl, __libdl_version_placeholder_1,
+ __libdl_version_placeholder, GLIBC_2_3_3);
+#endif
+
#if SHLIB_COMPAT (libdl, GLIBC_2_3_4, GLIBC_2_34) \
&& ABI_libdl_GLIBC_2_3_4 != ABI_libdl_GLIBC_2_1
compat_symbol (libdl, __libdl_version_placeholder_1,
diff --git a/dlfcn/dlinfo.c b/dlfcn/dlinfo.c
index 9fb2a1405c..15fcbc5dc1 100644
--- a/dlfcn/dlinfo.c
+++ b/dlfcn/dlinfo.c
@@ -20,18 +20,8 @@
#include <link.h>
#include <ldsodefs.h>
#include <libintl.h>
-
-#if !defined SHARED && IS_IN (libdl)
-
-int
-dlinfo (void *handle, int request, void *arg)
-{
- return __dlinfo (handle, request, arg);
-}
-
-#else
-
-# include <dl-tls.h>
+#include <dl-tls.h>
+#include <shlib-compat.h>
struct dlinfo_args
{
@@ -88,18 +78,33 @@ dlinfo_doit (void *argsblock)
}
}
+static int
+dlinfo_implementation (void *handle, int request, void *arg)
+{
+ struct dlinfo_args args = { handle, request, arg };
+ return _dlerror_run (&dlinfo_doit, &args) ? -1 : 0;
+}
+
+#ifdef SHARED
int
-__dlinfo (void *handle, int request, void *arg)
+___dlinfo (void *handle, int request, void *arg)
{
-# ifdef SHARED
if (!rtld_active ())
return _dlfcn_hook->dlinfo (handle, request, arg);
-# endif
-
- struct dlinfo_args args = { handle, request, arg };
- return _dlerror_run (&dlinfo_doit, &args) ? -1 : 0;
+ else
+ return dlinfo_implementation (handle, request, arg);
}
-# ifdef SHARED
-strong_alias (__dlinfo, dlinfo)
+versioned_symbol (libc, ___dlinfo, dlinfo, GLIBC_2_34);
+
+# if OTHER_SHLIB_COMPAT (libdl, GLIBC_2_3_3, GLIBC_2_34)
+compat_symbol (libc, ___dlinfo, dlinfo, GLIBC_2_3_3);
# endif
+#else /* !SHARED */
+/* Also used with _dlfcn_hook. */
+int
+__dlinfo (void *handle, int request, void *arg)
+{
+ return dlinfo_implementation (handle, request, arg);
+}
+weak_alias (__dlinfo, dlinfo)
#endif
diff --git a/dlfcn/sdlinfo.c b/dlfcn/sdlinfo.c
deleted file mode 100644
index dcc257dd1f..0000000000
--- a/dlfcn/sdlinfo.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "dlinfo.c"
diff --git a/include/dlfcn.h b/include/dlfcn.h
index dc5193acbb..e898c17792 100644
--- a/include/dlfcn.h
+++ b/include/dlfcn.h
@@ -143,7 +143,7 @@ extern void *__dlvsym (void *handle, const char *name, const char *version
extern int __dladdr (const void *address, Dl_info *info);
extern int __dladdr1 (const void *address, Dl_info *info,
void **extra_info, int flags);
-extern int __dlinfo (void *handle, int request, void *arg) attribute_hidden;
+extern int __dlinfo (void *handle, int request, void *arg);
#ifndef SHARED
struct link_map;
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index 172e269fe9..f4adfc6e5f 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -2145,6 +2145,7 @@ GLIBC_2.3.2 setresgid F
GLIBC_2.3.2 setresuid F
GLIBC_2.3.2 strptime_l F
GLIBC_2.3.3 dladdr1 F
+GLIBC_2.3.3 dlinfo F
GLIBC_2.3.3 inet6_option_alloc F
GLIBC_2.3.3 inet6_option_append F
GLIBC_2.3.3 inet6_option_find F
@@ -2217,6 +2218,7 @@ GLIBC_2.34 dladdr F
GLIBC_2.34 dladdr1 F
GLIBC_2.34 dlclose F
GLIBC_2.34 dlerror F
+GLIBC_2.34 dlinfo F
GLIBC_2.34 dlmopen F
GLIBC_2.34 dlsym F
GLIBC_2.34 execveat F
diff --git a/sysdeps/mach/hurd/i386/libdl.abilist b/sysdeps/mach/hurd/i386/libdl.abilist
index 9e890a9815..3a60902d2a 100644
--- a/sysdeps/mach/hurd/i386/libdl.abilist
+++ b/sysdeps/mach/hurd/i386/libdl.abilist
@@ -1,4 +1,4 @@
GLIBC_2.2.6 dlopen F
GLIBC_2.2.6 dlvsym F
-GLIBC_2.3.3 dlinfo F
+GLIBC_2.3.3 __libdl_version_placeholder F
GLIBC_2.3.4 __libdl_version_placeholder F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index f09046237f..a962e2966c 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/