From: Bruno Haible Date: Mon, 6 Jan 2025 00:16:11 +0000 (+0100) Subject: sigsegv tests: Work around a longjmp bug on GNU/Hurd. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=1a54d2d97667d8f9cc2ac02580f78264de4849bd;p=gnulib.git sigsegv tests: Work around a longjmp bug on GNU/Hurd. * tests/test-sigsegv-catch-stackoverflow1.c (_FORTIFY_SOURCE, __USE_FORTIFY_LEVEL): Undefine, as a workaround to the Hurd longjmp bug. * tests/test-sigsegv-catch-stackoverflow2.c (_FORTIFY_SOURCE, __USE_FORTIFY_LEVEL): Likewise. * doc/posix-functions/longjmp.texi: Document the Hurd bug. --- diff --git a/ChangeLog b/ChangeLog index e9a94eef12..78fb3c06b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2025-01-05 Bruno Haible + + sigsegv tests: Work around a longjmp bug on GNU/Hurd. + * tests/test-sigsegv-catch-stackoverflow1.c (_FORTIFY_SOURCE, + __USE_FORTIFY_LEVEL): Undefine, as a workaround to the Hurd longjmp bug. + * tests/test-sigsegv-catch-stackoverflow2.c (_FORTIFY_SOURCE, + __USE_FORTIFY_LEVEL): Likewise. + * doc/posix-functions/longjmp.texi: Document the Hurd bug. + 2025-01-05 Bruno Haible xstrtol, xstrtoll tests: Avoid test failure after 2024-07-25 change. diff --git a/doc/posix-functions/longjmp.texi b/doc/posix-functions/longjmp.texi index 057d0ab83f..b6163c9dc5 100644 --- a/doc/posix-functions/longjmp.texi +++ b/doc/posix-functions/longjmp.texi @@ -18,7 +18,13 @@ since it restores the contents of register-allocated variables but not the contents of stack-allocated variables. @item When longjumping out of a signal handler that was being executed on an -alternate stack (installed through @code{sigaltstack}), on FreeBSD, NetBSD, -OpenBSD, you need to clear the @code{SS_ONSTACK} flag in the @code{stack_t} +alternate stack (installed through @code{sigaltstack}), +on Hurd, FreeBSD, NetBSD, OpenBSD, +you need to clear the @code{SS_ONSTACK} flag in the @code{stack_t} structure managed by the kernel. +@item +This function may crash when the invoker code was compiled with option +@code{-D_FORTIFY_SOURCE=2}, +@c https://sourceware.org/bugzilla/show_bug.cgi?id=32522 +on Hurd. @end itemize diff --git a/tests/test-sigsegv-catch-stackoverflow1.c b/tests/test-sigsegv-catch-stackoverflow1.c index 093eb50e5f..cb20bceb8e 100644 --- a/tests/test-sigsegv-catch-stackoverflow1.c +++ b/tests/test-sigsegv-catch-stackoverflow1.c @@ -18,6 +18,14 @@ #include +/* On GNU/Hurd, when compiling with -D_FORTIFY_SOURCE=2, avoid an error + "*** longjmp causes uninitialized stack frame ***: terminated". + Cf. */ +#ifdef __GNU__ +# undef _FORTIFY_SOURCE +# undef __USE_FORTIFY_LEVEL +#endif + /* Specification. */ #include "sigsegv.h" diff --git a/tests/test-sigsegv-catch-stackoverflow2.c b/tests/test-sigsegv-catch-stackoverflow2.c index f88bfb4e39..34ea491740 100644 --- a/tests/test-sigsegv-catch-stackoverflow2.c +++ b/tests/test-sigsegv-catch-stackoverflow2.c @@ -18,6 +18,14 @@ #include +/* On GNU/Hurd, when compiling with -D_FORTIFY_SOURCE=2, avoid an error + "*** longjmp causes uninitialized stack frame ***: terminated". + Cf. */ +#ifdef __GNU__ +# undef _FORTIFY_SOURCE +# undef __USE_FORTIFY_LEVEL +#endif + /* Specification. */ #include "sigsegv.h"