From: Pedro Alves Date: Thu, 21 May 2026 14:33:16 +0000 (+0100) Subject: Adjust gdb.base/exitsignal.exp for Cygwin X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=13f28e68cc751e4aac96f0ae700d7a708791006c;p=thirdparty%2Fbinutils-gdb.git Adjust gdb.base/exitsignal.exp for Cygwin Cygwin has this feature where if the program is about to die with a signal, and there's a debugger attached, it raises a SIGTRAP via DebugBreak. So if you try to pass a terminating signal to the inferior, you see that SIGTRAP first, before the process exits with the signal. E.g.: Thread 1 "segfault" received signal SIGSEGV, Segmentation fault. 0x0000000100401092 in main () at segfault.cc:5 5 *(volatile int *)0; (gdb) c Continuing. Thread 1 "segfault" received signal SIGTRAP, Trace/breakpoint trap. 0x00007ffe99d35a13 in KERNELBASE!DebugBreak () from C:/WINDOWS/System32/KERNELBASE.dll (gdb) bt #0 0x00007ffe99d35a13 in KERNELBASE!DebugBreak () from C:/WINDOWS/System32/KERNELBASE.dll #1 0x00007ffe896163b7 in break_here () at /usr/src/debug/cygwin-3.6.9-1/winsup/cygwin/dcrt0.cc:473 #2 0x00007ffe8962fe13 in try_to_debug () at /usr/src/debug/cygwin-3.6.9-1/winsup/cygwin/exceptions.cc:599 #3 exception::handle (e=0x7ffffc9b0, frame=, in=0x7ffffc4c0, dispatch=) at /usr/src/debug/cygwin-3.6.9-1/winsup/cygwin/exceptions.cc:812 #4 0x00007ffe9c5e63df in ntdll!.chkstk () from C:/WINDOWS/SYSTEM32/ntdll.dll #5 0x00007ffe9c499497 in ntdll!RtlLocateExtendedFeature () from C:/WINDOWS/SYSTEM32/ntdll.dll #6 0x00007ffe9c5e5d1e in ntdll!KiUserExceptionDispatcher () from C:/WINDOWS/SYSTEM32/ntdll.dll #7 0x0000000100401092 in main () at segfault.cc:5 (gdb) c Continuing. ... [Inferior 1 (process 8032) exited with code 05400] (gdb) gdb.base/exitsignal.exp fails on Cygwin partly because it doesn't take that into account. This commit fixes it. In addition, the typical adjustement for the fact that all programs are multi-threaded on Windows is also necessary. gdb.base/exitsignal.exp still won't pass cleanly on Cygwin yet. That'll be finally fixed in a following patch. Approved-By: Tom Tromey Change-Id: I2d18e2604afe3a4f80987848e2c1cd307ed43401 commit-id: 013964ce --- diff --git a/gdb/testsuite/gdb.base/exitsignal.exp b/gdb/testsuite/gdb.base/exitsignal.exp index aa2710450b5..5099ae1a1d6 100644 --- a/gdb/testsuite/gdb.base/exitsignal.exp +++ b/gdb/testsuite/gdb.base/exitsignal.exp @@ -50,7 +50,14 @@ gdb_test "print \$_exitcode" " = void" \ "\$_exitcode is void before running" # Trigger SIGSEGV. -gdb_test "continue" "Program received signal SIGSEGV.*" "trigger SIGSEGV" +gdb_test "continue" "(Thread .*|Program) received signal SIGSEGV.*" \ + "trigger SIGSEGV" + +if {[istarget "*-*-cygwin*"]} { + # Cygwin calls DebugBreak before it lets the process exit. + gdb_test "continue" "Thread .* received signal SIGTRAP.*" \ + "trigger try_to_debug SIGTRAP" +} # Continue until the end. gdb_test "continue" "Program terminated with signal SIGSEGV.*" \