# Script to run a headless gdb printing a stacktrace on a fatal signal
# Use it as: `gdb -batch -nx -x gdbcmds.txt --args $PROGRAM_AND_ARGS`
# Configure CMake with -DSDLTEST_GDB=ON to use with within CTest.

set pagination off
set confirm off
set verbose off

# Only stop on real crash signals
handle SIGSEGV stop print nopass
handle SIGABRT stop print nopass
handle SIGILL  stop print nopass
handle SIGFPE  stop print nopass
handle SIGBUS  stop print nopass

# Ignore SIGPIPE and SIGTERM signals
# (SIGTERM is used by testthread)
handle SIGPIPE nostop noprint pass
handle SIGTERM nostop noprint pass

define hook-stop
  if !$_isvoid($_siginfo)
    printf "\n=== Crash detected (signal %d) ===\n", $_siginfo.si_signo
    bt full
    quit 1
  end
end

run

# Normal exit path
if !$_isvoid($_exitcode)
  quit $_exitcode
end

quit 0
