aboutsummaryrefslogtreecommitdiff
path: root/elf/Makefile
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2023-05-30 13:25:50 +0200
committerFlorian Weimer <fweimer@redhat.com>2023-05-30 13:25:50 +0200
commitd0f07f7df8d9758c838674b70144ac73bcbd1634 (patch)
treebf73fe79a9c8491aa6646a5b194c57e20b6a0871 /elf/Makefile
parent3eed5f3a1ee356969afb403a1cf18d06f8d2d98a (diff)
downloadglibc-d0f07f7df8d9758c838674b70144ac73bcbd1634.zip
glibc-d0f07f7df8d9758c838674b70144ac73bcbd1634.tar.gz
glibc-d0f07f7df8d9758c838674b70144ac73bcbd1634.tar.bz2
elf: Make more functions available for binding during dlclose (bug 30425)
Previously, after destructors for a DSO have been invoked, ld.so refused to bind against that DSO in all cases. Relax this restriction somewhat if the referencing object is itself a DSO that is being unloaded. This assumes that the symbol reference is not going to be stored anywhere. The situation in the test case can arise fairly easily with C++ and objects that are built with different optimization levels and therefore define different functions with vague linkage. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'elf/Makefile')
-rw-r--r--elf/Makefile8
1 files changed, 8 insertions, 0 deletions
diff --git a/elf/Makefile b/elf/Makefile
index 2647371..3bfc305 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -396,6 +396,7 @@ tests += \
tst-debug1 \
tst-deep1 \
tst-dl-is_dso \
+ tst-dlclose-lazy \
tst-dlmodcount \
tst-dlmopen-dlerror \
tst-dlmopen-gethostbyname \
@@ -816,6 +817,8 @@ modules-names += \
tst-dl_find_object-mod7 \
tst-dl_find_object-mod8 \
tst-dl_find_object-mod9 \
+ tst-dlclose-lazy-mod1 \
+ tst-dlclose-lazy-mod2 \
tst-dlmopen-dlerror-mod \
tst-dlmopen-gethostbyname-mod \
tst-dlmopen-twice-mod1 \
@@ -3001,3 +3004,8 @@ $(objpfx)tst-sprof-basic.out: tst-sprof-basic.sh $(objpfx)tst-sprof-basic
'$(run-program-env)' > $@; \
$(evaluate-test)
generated += tst-sprof-mod.so.profile
+
+LDFLAGS-tst-dlclose-lazy-mod1.so = -Wl,-z,lazy,--no-as-needed
+$(objpfx)tst-dlclose-lazy-mod1.so: $(objpfx)tst-dlclose-lazy-mod2.so
+$(objpfx)tst-dlclose-lazy.out: \
+ $(objpfx)tst-dlclose-lazy-mod1.so $(objpfx)tst-dlclose-lazy-mod2.so