summary refs log tree commit diff
path: root/elf
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2021-07-07 08:40:41 +0200
committerFlorian Weimer <fweimer@redhat.com>2021-07-07 08:41:24 +0200
commit7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8 (patch)
treed67381f1001d86e3b2596a4caf857b2926bf225a /elf
parentceda365fbac3083e16eed07892fbd5970b3839a0 (diff)
downloadglibc-7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8.tar.gz
glibc-7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8.tar.xz
glibc-7a5db2e82fbb6c3a6e3fdae02b7166c5d0e8c7a8.zip
elf: Clean up GLIBC_PRIVATE exports of internal libdl symbols
They are no longer needed after everything has been moved into
libc.  The _dl_vsym test has to be removed because the symbol
cannot be used outside libc anymore.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
Diffstat (limited to 'elf')
-rw-r--r--elf/Makefile16
-rw-r--r--elf/Versions3
-rw-r--r--elf/dl-addr.c1
-rw-r--r--elf/dl-libc.c4
-rw-r--r--elf/dl-sym.c2
-rw-r--r--elf/tst-libc_dlvsym-dso.c25
-rw-r--r--elf/tst-libc_dlvsym-static.c32
-rw-r--r--elf/tst-libc_dlvsym.c34
-rw-r--r--elf/tst-libc_dlvsym.h130
9 files changed, 4 insertions, 243 deletions
diff --git a/elf/Makefile b/elf/Makefile
index 698a6ab985..b1e01d9516 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -165,7 +165,7 @@ tests-static-normal := tst-leaks1-static tst-array1-static tst-array5-static \
 
 tests-static-internal := tst-tls1-static tst-tls2-static \
 	       tst-ptrguard1-static tst-stackguard1-static \
-	       tst-tls1-static-non-pie tst-libc_dlvsym-static
+	       tst-tls1-static-non-pie
 
 CRT-tst-tls1-static-non-pie := $(csu-objpfx)crt1.o
 tst-tls1-static-non-pie-no-pie = yes
@@ -229,7 +229,7 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \
 tests-internal += loadtest unload unload2 circleload1 \
 	 neededtest neededtest2 neededtest3 neededtest4 \
 	 tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
-	 tst-ptrguard1 tst-stackguard1 tst-libc_dlvsym \
+	 tst-ptrguard1 tst-stackguard1 \
 	 tst-create_format1 tst-tls-surplus tst-dl-hwcaps_split
 tests-container += tst-pldd tst-dlopen-tlsmodid-container \
   tst-dlopen-self-container tst-preload-pthread-libc
@@ -326,7 +326,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
 		tst-audit12mod1 tst-audit12mod2 tst-audit12mod3 tst-auditmod12 \
 		tst-latepthreadmod $(tst-tls-many-dynamic-modules) \
 		tst-nodelete-dlclose-dso tst-nodelete-dlclose-plugin \
-		tst-main1mod tst-libc_dlvsym-dso tst-absolute-sym-lib \
+		tst-main1mod tst-absolute-sym-lib \
 		tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib \
 		tst-audit13mod1 tst-sonamemove-linkmod1 \
 		tst-sonamemove-runmod1 tst-sonamemove-runmod2 \
@@ -352,7 +352,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
 
 # Most modules build with _ISOMAC defined, but those filtered out
 # depend on internal headers.
-modules-names-tests = $(filter-out ifuncmod% tst-libc_dlvsym-dso tst-tlsmod%,\
+modules-names-tests = $(filter-out ifuncmod% tst-tlsmod%,\
 				   $(modules-names))
 
 ifeq (yes,$(have-mtls-dialect-gnu2))
@@ -1582,14 +1582,6 @@ LDLIBS-tst-absolute-zero-lib.so = tst-absolute-zero-lib.lds
 $(objpfx)tst-absolute-zero-lib.so: $(LDLIBS-tst-absolute-zero-lib.so)
 $(objpfx)tst-absolute-zero: $(objpfx)tst-absolute-zero-lib.so
 
-# Both the main program and the DSO for tst-libc_dlvsym need to link
-# against libdl.
-$(objpfx)tst-libc_dlvsym-dso.so: $(libsupport)
-$(objpfx)tst-libc_dlvsym.out: $(objpfx)tst-libc_dlvsym-dso.so
-tst-libc_dlvsym-static-ENV = \
-  LD_LIBRARY_PATH=$(ld-library-path):$(common-objpfx)dlfcn
-$(objpfx)tst-libc_dlvsym-static.out: $(objpfx)tst-libc_dlvsym-dso.so
-
 $(objpfx)tst-big-note: $(objpfx)tst-big-note-lib.so
 # Avoid creating an ABI tag note, which may come before the
 # artificial, large note in tst-big-note-lib.o and invalidate the
diff --git a/elf/Versions b/elf/Versions
index a12d64e8db..775aab62af 100644
--- a/elf/Versions
+++ b/elf/Versions
@@ -22,9 +22,6 @@ libc {
 %endif
   GLIBC_PRIVATE {
     # functions used in other libraries
-    _dl_addr;
-    _dl_sym; _dl_vsym;
-    __libc_dlclose; __libc_dlopen_mode; __libc_dlsym; __libc_dlvsym;
     __libc_early_init;
 
     # Internal error handling support.  Interposes the functions in ld.so.
diff --git a/elf/dl-addr.c b/elf/dl-addr.c
index 70a60d5b91..3226880d48 100644
--- a/elf/dl-addr.c
+++ b/elf/dl-addr.c
@@ -142,4 +142,3 @@ _dl_addr (const void *address, Dl_info *info,
 
   return result;
 }
-libc_hidden_def (_dl_addr)
diff --git a/elf/dl-libc.c b/elf/dl-libc.c
index ba792e9589..d5bc4a277f 100644
--- a/elf/dl-libc.c
+++ b/elf/dl-libc.c
@@ -162,7 +162,6 @@ __libc_dlopen_mode (const char *name, int mode)
 #endif
   return dlerror_run (do_dlopen, &args) ? NULL : (void *) args.map;
 }
-libc_hidden_def (__libc_dlopen_mode)
 
 #ifndef SHARED
 void *
@@ -192,7 +191,6 @@ __libc_dlsym (void *map, const char *name)
   return (dlerror_run (do_dlsym, &args) ? NULL
 	  : (void *) (DL_SYMBOL_ADDRESS (args.loadbase, args.ref)));
 }
-libc_hidden_def (__libc_dlsym)
 
 /* Replacement for dlvsym.  MAP must be a real map.  This function
    returns NULL without setting the dlerror value in case of static
@@ -219,7 +217,6 @@ __libc_dlvsym (void *map, const char *name, const char *version)
 	  : (void *) (DL_SYMBOL_ADDRESS (args.dlsym.loadbase,
 					 args.dlsym.ref)));
 }
-libc_hidden_def (__libc_dlvsym)
 
 int
 __libc_dlclose (void *map)
@@ -230,7 +227,6 @@ __libc_dlclose (void *map)
 #endif
   return dlerror_run (do_dlclose, map);
 }
-libc_hidden_def (__libc_dlclose)
 
 
 static bool __libc_freeres_fn_section
diff --git a/elf/dl-sym.c b/elf/dl-sym.c
index fa0cce678f..de5769f926 100644
--- a/elf/dl-sym.c
+++ b/elf/dl-sym.c
@@ -188,11 +188,9 @@ _dl_vsym (void *handle, const char *name, const char *version, void *who)
 
   return do_sym (handle, name, who, &vers, 0);
 }
-libc_hidden_def (_dl_vsym)
 
 void *
 _dl_sym (void *handle, const char *name, void *who)
 {
   return do_sym (handle, name, who, NULL, DL_LOOKUP_RETURN_NEWEST);
 }
-libc_hidden_def (_dl_sym)
diff --git a/elf/tst-libc_dlvsym-dso.c b/elf/tst-libc_dlvsym-dso.c
deleted file mode 100644
index 19091ddb41..0000000000
--- a/elf/tst-libc_dlvsym-dso.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Compare dlvsym and __libc_dlvsym results.  Shared object code.
-   Copyright (C) 2017-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include "tst-libc_dlvsym.h"
-
-void
-compare_vsyms_global (void)
-{
-  compare_vsyms ();
-}
diff --git a/elf/tst-libc_dlvsym-static.c b/elf/tst-libc_dlvsym-static.c
deleted file mode 100644
index 19c438c3cd..0000000000
--- a/elf/tst-libc_dlvsym-static.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Compare dlvsym and __libc_dlvsym results.  Static version.
-   Copyright (C) 2017-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <support/xdlfcn.h>
-
-static int
-do_test (void)
-{
-  void *handle = xdlopen ("tst-libc_dlvsym-dso.so", RTLD_LAZY);
-  void (*compare) (void) = xdlsym (handle, "compare_vsyms_global");
-  compare ();
-  xdlclose (handle);
-
-  return 0;
-}
-
-#include <support/test-driver.c>
diff --git a/elf/tst-libc_dlvsym.c b/elf/tst-libc_dlvsym.c
deleted file mode 100644
index 823643fb1c..0000000000
--- a/elf/tst-libc_dlvsym.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Compare dlvsym and __libc_dlvsym results.  Dynamic version.
-   Copyright (C) 2017-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include "tst-libc_dlvsym.h"
-
-static int
-do_test (void)
-{
-  compare_vsyms ();
-
-  void *handle = xdlopen ("tst-libc_dlvsym-dso.so", RTLD_LAZY);
-  void (*compare) (void) = xdlsym (handle, "compare_vsyms_global");
-  compare ();
-  xdlclose (handle);
-
-  return 0;
-}
-
-#include <support/test-driver.c>
diff --git a/elf/tst-libc_dlvsym.h b/elf/tst-libc_dlvsym.h
deleted file mode 100644
index 1a8f2e9271..0000000000
--- a/elf/tst-libc_dlvsym.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Compare dlvsym and __libc_dlvsym results.  Common code.
-   Copyright (C) 2017-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-/* compare_vsyms is the main entry point for these tests.
-
-   Indirectly, It calls __libc_dlvsym (from libc.so; internal
-   interface) and dlvsym (from libdl.so; public interface) to compare
-   the results for a selected set of symbols in libc.so which
-   typically have more than one symbol version.  The two functions are
-   implemented by somewhat different code, and this test checks that
-   their results are the same.
-
-   The versions are generated to range from GLIBC_2.0 to GLIBC_2.Y,
-   with Y being the current __GLIBC_MINOR__ version plus two.  In
-   addition, there is a list of special symbol versions of the form
-   GLIBC_2.Y.Z, which were used for some releases.
-
-   Comparing the two dlvsym results at versions which do not actually
-   exist does not test much, but it will not contribute to false test
-   failures, either.  */
-
-#include <array_length.h>
-#include <gnu/lib-names.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <support/check.h>
-#include <support/xdlfcn.h>
-
-/* Run consistency check for versioned symbol NAME@VERSION.  NB: We
-   may execute in a shared object, so exit on error for proper error
-   reporting.  */
-static void
-compare_vsyms_0 (void *libc_handle, const char *name, const char *version,
-                 bool *pfound)
-{
-  void *dlvsym_address = dlvsym (libc_handle, name, version);
-  void *libc_dlvsym_address
-    = __libc_dlvsym (libc_handle, name, version);
-  if (dlvsym_address != libc_dlvsym_address)
-    FAIL_EXIT1 ("%s@%s mismatch: %p != %p",
-                name, version, dlvsym_address, libc_dlvsym_address);
-  if (dlvsym_address != NULL)
-    *pfound = true;
-}
-
-
-/* Run consistency check for versioned symbol NAME at multiple symbol
-   version.  */
-static void
-compare_vsyms_1 (void *libc_handle, const char *name)
-{
-  bool found = false;
-
-  /* Historic versions which do not follow the usual GLIBC_2.Y
-     pattern, to increase test coverage.  Not all architectures have
-     those, but probing additional versions does not hurt.  */
-  static const char special_versions[][12] =
-    {
-      "GLIBC_2.1.1",
-      "GLIBC_2.1.2",
-      "GLIBC_2.1.3",
-      "GLIBC_2.1.4",
-      "GLIBC_2.2.1",
-      "GLIBC_2.2.2",
-      "GLIBC_2.2.3",
-      "GLIBC_2.2.4",
-      "GLIBC_2.2.5",
-      "GLIBC_2.2.6",
-      "GLIBC_2.3.2",
-      "GLIBC_2.3.3",
-      "GLIBC_2.3.4",
-    };
-  for (int i = 0; i < array_length (special_versions); ++i)
-    compare_vsyms_0 (libc_handle, name, special_versions[i], &found);
-
-  /* Iterate to an out-of-range version, to cover some unused symbols
-     as well.  */
-  for (int minor_version = 0; minor_version <= __GLIBC_MINOR__ + 2;
-       ++minor_version)
-    {
-      char version[30];
-      snprintf (version, sizeof (version), "GLIBC_%d.%d",
-                __GLIBC__, minor_version);
-      compare_vsyms_0 (libc_handle, name, version, &found);
-    }
-
-  if (!found)
-    FAIL_EXIT1 ("symbol %s not found at any version", name);
-}
-
-/* Run consistency checks for various symbols which usually have
-   multiple versions.  */
-static void
-compare_vsyms (void)
-{
-  /* The minor version loop in compare_vsyms_1 needs updating in case
-     we ever switch to glibc 3.0.  */
-  if (__GLIBC__ != 2)
-    FAIL_EXIT1 ("unexpected glibc major version: %d", __GLIBC__);
-
-  /* __libc_dlvsym does not recognize the special RTLD_* handles, so
-     obtain an explicit handle for libc.so.  */
-  void *libc_handle = xdlopen (LIBC_SO, RTLD_LAZY | RTLD_NOLOAD);
-
-
-  /* sys_errlist and sys_siglist were deprecated in glibc 2.32 and they are
-     not available on architectures with base ABI newer than 2.32.  */
-#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_32)
-  compare_vsyms_1 (libc_handle, "_sys_errlist");
-  compare_vsyms_1 (libc_handle, "_sys_siglist");
-#endif
-  compare_vsyms_1 (libc_handle, "quick_exit");
-
-  xdlclose (libc_handle);
-}