mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
119 lines
3.0 KiB
Plaintext
119 lines
3.0 KiB
Plaintext
# Copyright 2014-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/>. */
|
|
|
|
# Verify that GDB waits for the "attach" command to finish before
|
|
# processing the following command.
|
|
#
|
|
# GDB used to have a race where on async targets, in the small window
|
|
# between the attach request and the initial stop for the attach, GDB
|
|
# was still processing user input.
|
|
#
|
|
# The issue was originally detected with:
|
|
#
|
|
# echo -e "attach PID\nset xxx=1" | gdb
|
|
#
|
|
# In that scenario, stdin is not a tty, which disables readline.
|
|
# Explicitly turning off editing exercises the same code path, and is
|
|
# simpler to do, so we test with both editing on and off.
|
|
|
|
# The test uses the "attach" command.
|
|
if [use_gdb_stub] {
|
|
return
|
|
}
|
|
|
|
standard_testfile
|
|
|
|
if {[build_executable "failed to build" $testfile $srcfile debug]} {
|
|
return -1
|
|
}
|
|
|
|
# Start the program running, and return its PID, ready for attaching.
|
|
|
|
proc start_program {binfile} {
|
|
global gdb_prompt
|
|
global decimal
|
|
|
|
clean_restart $binfile
|
|
|
|
if ![runto setup_done] then {
|
|
return 0
|
|
}
|
|
|
|
# Get the PID of the test process.
|
|
set testpid ""
|
|
set test "get inferior process ID"
|
|
gdb_test_multiple "p mypid" $test {
|
|
-re " = ($decimal)\r\n$gdb_prompt $" {
|
|
set testpid $expect_out(1,string)
|
|
pass $test
|
|
}
|
|
}
|
|
|
|
gdb_test "detach" "Detaching from program: .*"
|
|
|
|
if {$testpid == ""} {
|
|
return
|
|
}
|
|
|
|
return $testpid
|
|
}
|
|
|
|
# Do test proper. EDITING indicates whether "set editing" is on or
|
|
# off.
|
|
|
|
proc test { editing } {
|
|
global gdb_prompt
|
|
global binfile
|
|
global decimal
|
|
|
|
with_test_prefix "editing $editing" {
|
|
|
|
set testpid [start_program $binfile]
|
|
if {$testpid == ""} {
|
|
return
|
|
}
|
|
|
|
# Enable/disable readline.
|
|
gdb_test_no_output "set editing $editing"
|
|
|
|
# Send both commands at once.
|
|
send_gdb "attach $testpid\nprint should_exit = 1\n"
|
|
|
|
# Use gdb_expect directly instead of gdb_test_multiple to
|
|
# avoid races with the double prompt.
|
|
set test "attach and print"
|
|
gdb_expect {
|
|
-re "Attaching to program.*process $testpid\r\n.*$gdb_prompt.*$decimal = 1\r\n$gdb_prompt $" {
|
|
pass "$test"
|
|
}
|
|
timeout {
|
|
fail "$test (timeout)"
|
|
}
|
|
}
|
|
|
|
# As we've used attach, on quit, we'll detach from the
|
|
# program. Explicitly kill it in case we failed above.
|
|
gdb_test "kill" \
|
|
"" \
|
|
"after attach, exit" \
|
|
"Kill the program being debugged.*y or n. $" \
|
|
"y"
|
|
}
|
|
}
|
|
|
|
foreach editing {"on" "off"} {
|
|
test $editing
|
|
}
|