about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2023-07-20 18:31:48 +0200
committerFlorian Weimer <fweimer@redhat.com>2023-07-21 16:40:30 +0200
commit1c08c171560c8eb9bb54bc5d45cd49175192315e (patch)
tree2958a1a1bfad97f10bcd0fb6de3abe23a5d10ef3
parent2d4f26e5cfda682f9ce61444b81533b83f6381af (diff)
downloadglibc-1c08c171560c8eb9bb54bc5d45cd49175192315e.tar.gz
glibc-1c08c171560c8eb9bb54bc5d45cd49175192315e.tar.xz
glibc-1c08c171560c8eb9bb54bc5d45cd49175192315e.zip
debug: Mark libSegFault.so as NODELETE
The signal handler installed in the ELF constructor cannot easily
be removed again (because the program may have changed handlers
in the meantime).  Mark the object as NODELETE so that the registered
handler function is never unloaded.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
(cherry picked from commit 23ee92deea4c99d0e6a5f48fa7b942909b123ec5)
-rw-r--r--debug/Makefile2
1 files changed, 2 insertions, 0 deletions
diff --git a/debug/Makefile b/debug/Makefile
index c62b2154bc..3a6b442238 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -168,6 +168,8 @@ extra-libs-others = $(extra-libs)
 
 libSegFault-routines = segfault
 libSegFault-inhibit-o = $(filter-out .os,$(object-suffixes))
+# libSegFault.so installs a signal handler in its ELF constructor.
+LDFLAGS-SegFault.so = -Wl,--enable-new-dtags,-z,nodelete
 
 libpcprofile-routines = pcprofile
 libpcprofile-inhibit-o = $(filter-out .os,$(object-suffixes))