[2.34] debug: Mark libSegFault.so as NODELETE
Checks
Commit Message
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.
Submitting this for 2.34 because libSegFault.so was removed in 2.35.
Verified using readelf -dW that NODELETE is now set on libSegFault.so.
(Note that there is no lib prefix on the LDFLAGS variable.)
---
debug/Makefile | 2 ++
1 file changed, 2 insertions(+)
base-commit: cad3adf4ddeada37912c1c13b59a2ea5dd5d2832
Comments
On 7/20/23 12:53, Florian Weimer via Libc-stable wrote:
> 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.
Agreed. This is a safe default to take given the usage of this DSO.
LGTM for backport into all stables branches with libSegFault.so.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
> Submitting this for 2.34 because libSegFault.so was removed in 2.35.
> Verified using readelf -dW that NODELETE is now set on libSegFault.so.
> (Note that there is no lib prefix on the LDFLAGS variable.)
>
> ---
> debug/Makefile | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/debug/Makefile b/debug/Makefile
> index 71248e0d45..9fbc40dc69 100644
> --- a/debug/Makefile
> +++ b/debug/Makefile
> @@ -213,6 +213,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))
>
> base-commit: cad3adf4ddeada37912c1c13b59a2ea5dd5d2832
>
@@ -213,6 +213,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))