| # Copyright 2021-2022 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 <http://www.gnu.org/licenses/>. |
| |
| # 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 |
| } |
| } |