mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
Test that terminal settings are restored after quitting via SIGTERM
Tested on x86_64 Debian Stretch, native, gdbserver and extended-gdbserver. Also tested that the various error paths, like if $PPID is empty or if SIGTERM did not not kill GDB, function correctly. gdb/testsuite/ChangeLog: * gdb.base/batch-preserve-term-settings.exp (send_quit_command): New proc. (test_terminal_settings_preserved_after_sigterm): New test.
This commit is contained in:
@ -14,6 +14,12 @@
|
|||||||
* gdb.python/py-objfile.exp: Fix typo that snuck in from my last
|
* gdb.python/py-objfile.exp: Fix typo that snuck in from my last
|
||||||
commit.
|
commit.
|
||||||
|
|
||||||
|
2015-07-29 Patrick Palka <patrick@parcs.ath.cx>
|
||||||
|
|
||||||
|
* gdb.base/batch-preserve-term-settings.exp (send_quit_command):
|
||||||
|
New proc.
|
||||||
|
(test_terminal_settings_preserved_after_sigterm): New test.
|
||||||
|
|
||||||
2015-07-29 Patrick Palka <patrick@parcs.ath.cx>
|
2015-07-29 Patrick Palka <patrick@parcs.ath.cx>
|
||||||
|
|
||||||
* gdb.base/batch-preserve-term-settings.exp
|
* gdb.base/batch-preserve-term-settings.exp
|
||||||
|
@ -176,6 +176,33 @@ proc test_terminal_settings_preserved {} {
|
|||||||
exit_shell
|
exit_shell
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Send the quit command to GDB and make sure it exits.
|
||||||
|
|
||||||
|
proc send_quit_command { test_name } {
|
||||||
|
global shell_prompt_re
|
||||||
|
|
||||||
|
set test $test_name
|
||||||
|
send_gdb "quit\n"
|
||||||
|
gdb_expect {
|
||||||
|
-re "(y or n)" {
|
||||||
|
send_gdb "y\n"
|
||||||
|
exp_continue
|
||||||
|
}
|
||||||
|
-re ".*$shell_prompt_re$" {
|
||||||
|
pass $test
|
||||||
|
return
|
||||||
|
}
|
||||||
|
timeout {
|
||||||
|
fail "$test (timeout)"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
eof {
|
||||||
|
fail "$test (eof)"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Check that quitting from the CLI via the "quit" command does not leave the
|
# Check that quitting from the CLI via the "quit" command does not leave the
|
||||||
# terminal in the wrong state. The GDB commands CMDS are executed before
|
# terminal in the wrong state. The GDB commands CMDS are executed before
|
||||||
# quitting.
|
# quitting.
|
||||||
@ -254,6 +281,91 @@ proc test_terminal_settings_preserved_after_cli_exit { cmds } {
|
|||||||
exit_shell
|
exit_shell
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check that sending SIGTERM kills GDB and does not leave the terminal in the
|
||||||
|
# wrong state.
|
||||||
|
|
||||||
|
proc test_terminal_settings_preserved_after_sigterm { } {
|
||||||
|
global file_arg
|
||||||
|
global GDB INTERNAL_GDBFLAGS GDBFLAGS
|
||||||
|
global gdb_prompt
|
||||||
|
global shell_prompt_re
|
||||||
|
|
||||||
|
if ![spawn_shell] {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
set saved_gdbflags $GDBFLAGS
|
||||||
|
|
||||||
|
set stty_supported [run_stty "stty before" stty_before]
|
||||||
|
|
||||||
|
set test "start gdb"
|
||||||
|
send_gdb "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS [host_info gdb_opts]\n"
|
||||||
|
gdb_expect {
|
||||||
|
-re "$gdb_prompt $" {
|
||||||
|
pass $test
|
||||||
|
}
|
||||||
|
timeout {
|
||||||
|
fail "$test (timeout)"
|
||||||
|
}
|
||||||
|
eof {
|
||||||
|
fail "$test (eof)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Retrieve the pid of gdb with the gdb command "shell echo $PPID"
|
||||||
|
set gdb_pid -1
|
||||||
|
set test "run shell echo \$PPID"
|
||||||
|
send_gdb "shell echo \$PPID\n"
|
||||||
|
gdb_expect {
|
||||||
|
-re ".*\r\n(\\d+)\r\n$gdb_prompt $" {
|
||||||
|
set gdb_pid $expect_out(1,string)
|
||||||
|
pass $test
|
||||||
|
}
|
||||||
|
-re ".*\r\n\r\n$gdb_prompt $" {
|
||||||
|
fail "$test (no \$PPID)"
|
||||||
|
}
|
||||||
|
timeout {
|
||||||
|
fail "$test (timeout)"
|
||||||
|
}
|
||||||
|
eof {
|
||||||
|
fail "$test (eof)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set test "kill gdb with SIGTERM"
|
||||||
|
if { $gdb_pid == -1 } {
|
||||||
|
fail "$test (no pid)"
|
||||||
|
send_quit_command "quit gdb"
|
||||||
|
} else {
|
||||||
|
remote_exec host "kill -TERM $gdb_pid"
|
||||||
|
set gdb_killed 0
|
||||||
|
gdb_expect {
|
||||||
|
-re ".*$shell_prompt_re$" {
|
||||||
|
pass $test
|
||||||
|
set gdb_killed 1
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
fail "$test (did not quit)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !$gdb_killed {
|
||||||
|
send_quit_command "quit gdb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set test "terminal settings preserved"
|
||||||
|
if $stty_supported {
|
||||||
|
run_stty "stty after" stty_after
|
||||||
|
|
||||||
|
gdb_assert [string equal $stty_before $stty_after] $test
|
||||||
|
} else {
|
||||||
|
unsupported "$test (no stty)"
|
||||||
|
}
|
||||||
|
|
||||||
|
exit_shell
|
||||||
|
}
|
||||||
|
|
||||||
with_test_prefix "batch run" {
|
with_test_prefix "batch run" {
|
||||||
test_terminal_settings_preserved
|
test_terminal_settings_preserved
|
||||||
}
|
}
|
||||||
@ -269,3 +381,7 @@ with_test_prefix "cli exit after start cmd" {
|
|||||||
with_test_prefix "cli exit after run cmd" {
|
with_test_prefix "cli exit after run cmd" {
|
||||||
test_terminal_settings_preserved_after_cli_exit { "run" }
|
test_terminal_settings_preserved_after_cli_exit { "run" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
with_test_prefix "cli exit after SIGTERM" {
|
||||||
|
test_terminal_settings_preserved_after_sigterm
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user