about summary refs log tree commit diff
path: root/dlfcn
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:11:45 +0200
commit6f1c701026287f6928d3bdd1aea7359308635abe (patch)
tree8dcf3b5a755f131435a912f7629478deaff74264 /dlfcn
parent0c1c3a771eceec46e66ce1183cf988e2303bd373 (diff)
downloadglibc-6f1c701026287f6928d3bdd1aea7359308635abe.tar.gz
glibc-6f1c701026287f6928d3bdd1aea7359308635abe.tar.xz
glibc-6f1c701026287f6928d3bdd1aea7359308635abe.zip
dlfcn: Cleanups after -ldl is no longer required
This commit removes the ELF constructor and internal variables from
dlfcn/dlfcn.c.  The file now serves the same purpose as
nptl/libpthread-compat.c, so it is renamed to dlfcn/libdl-compat.c.
The use of libdl-shared-only-routines ensures that libdl.a is empty.

This commit adjusts the test suite not to use $(libdl).  The libdl.so
symbolic link is no longer installed.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
Diffstat (limited to 'dlfcn')
-rw-r--r--dlfcn/Makefile42
-rw-r--r--dlfcn/libdl-compat.c (renamed from dlfcn/dlfcn.c)25
2 files changed, 15 insertions, 52 deletions
diff --git a/dlfcn/Makefile b/dlfcn/Makefile
index a471d86071..6bbfbb8344 100644
--- a/dlfcn/Makefile
+++ b/dlfcn/Makefile
@@ -21,10 +21,8 @@ include ../Makeconfig
 
 headers		:= bits/dlfcn.h dlfcn.h
 extra-libs	:= libdl
-libdl-routines	:= dlfcn
-routines	:= $(patsubst %,s%,$(filter-out dlfcn,$(libdl-routines)))
-elide-routines.os := $(routines)
-routines += \
+libdl-routines	:= libdl-compat
+routines = \
   dladdr \
   dladdr1 \
   dlclose \
@@ -38,9 +36,16 @@ routines += \
 
 extra-libs-others := libdl
 
+libdl-shared-only-routines += libdl-compat
+
+# Pretend that libdl.so is a linker script, so that the symbolic
+# link is not installed.
+install-lib-ldscripts = libdl.so
+$(inst_libdir)/libdl.so:
+
 ifeq ($(build-shared),yes)
 routines += dlopenold
-shared-only-routines := dlopenold dlfcn
+shared-only-routines := dlopenold
 endif
 
 ifeq (yes,$(build-shared))
@@ -87,77 +92,54 @@ ifeq ($(build-shared),yes)
 tests: $(test-modules)
 endif
 
-$(objpfx)glrefmain: $(libdl)
 $(objpfx)glrefmain.out: $(objpfx)glrefmain \
 			$(objpfx)glreflib1.so $(objpfx)glreflib2.so
 
-$(objpfx)failtest: $(libdl)
 $(objpfx)failtest.out: $(objpfx)failtestmod.so
 
-$(objpfx)tst-dladdr: $(libdl)
 $(objpfx)tst-dladdr.out: $(objpfx)glreflib1.so
 
-$(objpfx)tst-dlinfo: $(libdl)
 $(objpfx)tst-dlinfo.out: $(objpfx)glreflib3.so
 LDFLAGS-glreflib3.so = -Wl,-rpath,:
 
 LDFLAGS-default = $(LDFLAGS-rdynamic)
-$(objpfx)default: $(libdl) $(objpfx)defaultmod1.so $(objpfx)defaultmod2.so
-$(objpfx)defaultmod1.so: $(libdl)
+$(objpfx)default: $(objpfx)defaultmod1.so $(objpfx)defaultmod2.so
 LDFLAGS-defaultmod2.so = $(LDFLAGS-Bsymbolic)
-$(objpfx)defaultmod2.so: $(libdl)
 
-$(objpfx)errmsg1: $(libdl)
 $(objpfx)errmsg1.out: $(objpfx)errmsg1 $(objpfx)errmsg1mod.so
 
-$(objpfx)tstatexit: $(libdl)
 $(objpfx)tstatexit.out: $(objpfx)tstatexit $(objpfx)modatexit.so
 
-$(objpfx)tstcxaatexit: $(libdl)
 $(objpfx)tstcxaatexit.out: $(objpfx)tstcxaatexit $(objpfx)modcxaatexit.so
 
-$(objpfx)tststatic: $(objpfx)libdl.a
 $(objpfx)tststatic.out: $(objpfx)tststatic $(objpfx)modstatic.so
 
-$(objpfx)tststatic2: $(objpfx)libdl.a
 $(objpfx)tststatic2.out: $(objpfx)tststatic2 $(objpfx)modstatic.so \
 			 $(objpfx)modstatic2.so
 
-$(objpfx)modstatic2.so: $(libdl)
-
-$(objpfx)tststatic3: $(objpfx)libdl.a
 $(objpfx)tststatic3.out: $(objpfx)tststatic3 $(objpfx)modstatic3.so
 
-$(objpfx)tststatic4: $(objpfx)libdl.a
 $(objpfx)tststatic4.out: $(objpfx)tststatic4 $(objpfx)modstatic3.so
 
-$(objpfx)tststatic5: $(objpfx)libdl.a
 $(objpfx)tststatic5.out: $(objpfx)tststatic5 $(objpfx)modstatic5.so
 
-$(objpfx)bug-dlopen1: $(libdl)
-
-$(objpfx)bug-dlsym1: $(libdl) $(objpfx)bug-dlsym1-lib2.so
+$(objpfx)bug-dlsym1: $(objpfx)bug-dlsym1-lib2.so
 $(objpfx)bug-dlsym1.out: $(objpfx)bug-dlsym1-lib1.so \
 			 $(objpfx)bug-dlsym1-lib2.so
 $(objpfx)bug-dlsym1-lib1.so: $(objpfx)bug-dlsym1-lib2.so
 
-$(objpfx)bug-atexit1: $(libdl)
 $(objpfx)bug-atexit1.out: $(objpfx)bug-atexit1-lib.so
 
-$(objpfx)bug-atexit2: $(libdl)
 $(objpfx)bug-atexit2.out: $(objpfx)bug-atexit2-lib.so
 
 ifneq (,$(CXX))
 LDLIBS-bug-atexit3-lib.so = -lstdc++ -lgcc_eh
 $(objpfx)bug-atexit3-lib.so: $(libsupport)
-$(objpfx)bug-atexit3: $(libdl)
 $(objpfx)bug-atexit3.out: $(objpfx)bug-atexit3-lib.so
 endif
 
 $(objpfx)bug-dl-leaf: $(objpfx)bug-dl-leaf-lib.so
 $(objpfx)bug-dl-leaf.out: $(objpfx)bug-dl-leaf-lib-cb.so
-$(objpfx)bug-dl-leaf-lib.so: $(libdl)
 $(objpfx)bug-dl-leaf-lib-cb.so: $(objpfx)bug-dl-leaf-lib.so
 
-$(objpfx)tst-rec-dlopen: $(libdl)
 $(objpfx)tst-rec-dlopen.out: $(objpfx)moddummy1.so $(objpfx)moddummy2.so
diff --git a/dlfcn/dlfcn.c b/dlfcn/libdl-compat.c
index ef750bc27a..d197a98e79 100644
--- a/dlfcn/dlfcn.c
+++ b/dlfcn/libdl-compat.c
@@ -1,4 +1,4 @@
-/* Load a shared object at run time.
+/* Placeholder compatibility symbols.
    Copyright (C) 2005-2021 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -19,27 +19,8 @@
 #include <dlfcn.h>
 #include <shlib-compat.h>
 
-int __dlfcn_argc attribute_hidden;
-char **__dlfcn_argv attribute_hidden;
-
-
-static void
-init (int argc, char *argv[])
-{
-  __dlfcn_argc = argc;
-  __dlfcn_argv = argv;
-}
-
-static void (*const init_array []) (int argc, char *argv[])
-     __attribute__ ((section (".init_array"), aligned (sizeof (void *))))
-     __attribute_used__ =
-{
-  init
-};
-
-/* The remainder of this file is used to keep specific symbol versions
-   occupied, so that ld does not generate weak symbol version
-   definitions.  */
+/* This file is used to keep specific symbol versions occupied, so
+   that ld does not generate weak symbol version definitions.  */
 
 void
 attribute_compat_text_section