# Copyright 2021-2023 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Test that GDB does not crash when it is started without a terminal / # without readline, and, it receives a SIGWINCH. Regression test for # PR gdb/26056. if [target_info exists gdb,nosignals] { verbose "Skipping $subdir/$gdb_test_file_name.exp because of nosignals." return } # The testfile relies on "run" from the command line, so only works # with "target native". if { [target_info gdb_protocol] != "" } { return } gdb_exit # Start GDB without a terminal, running sleep for a while. Before the # sleep exits, we'll send a SIGWINCH. "show editing" to double check # that readline is disabled. save_vars { GDB GDBFLAGS } { set GDB "$srcdir/lib/notty-wrap $GDB" set GDBFLAGS "$GDBFLAGS -ex \"show editing\" -ex run --args sleep 3" gdb_spawn } set gdb_pid [exp_pid -i $gdb_spawn_id] verbose -log "gdb_spawn_id=$gdb_spawn_id" verbose -log "gdb_pid=$gdb_pid" after 1000 { # Note, GDB is started under a shell, so PID is actually the # shell's pid, not GDB's. Use "-PID" to send the signal to the # whole process group and reach GDB, instead of just to the shell. remote_exec host "kill -SIGWINCH -${gdb_pid}" } # If GDB mishandles the SIGWINCH and crashes, that happens before we # see the "inferior exited normally" message, so this will ERROR with # eof. gdb_test_multiple "" "wait for sleep exit" { -re "Editing of command lines as they are typed is off.*$inferior_exited_re normally.*$gdb_prompt " { pass $gdb_test_name } } gdb_test_multiple "" "wait for gdb exit" { eof { set wait_status [wait -i $gdb_spawn_id] verbose -log "GDB process exited with wait status $wait_status" pass $gdb_test_name } }