Files
binutils-gdb/gdb/testsuite/gdb.server/server-kill.exp
Andrew Burgess 1d506c26d9 Update copyright year range in header of all files managed by GDB
This commit is the result of the following actions:

  - Running gdb/copyright.py to update all of the copyright headers to
    include 2024,

  - Manually updating a few files the copyright.py script told me to
    update, these files had copyright headers embedded within the
    file,

  - Regenerating gdbsupport/Makefile.in to refresh it's copyright
    date,

  - Using grep to find other files that still mentioned 2023.  If
    these files were updated last year from 2022 to 2023 then I've
    updated them this year to 2024.

I'm sure I've probably missed some dates.  Feel free to fix them up as
you spot them.
2024-01-12 15:49:57 +00:00

156 lines
4.1 KiB
Plaintext

# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2013-2024 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/>.
# Check that GDB handles GDBserver disconnecting abruptly, in several
# scenarios.
load_lib gdbserver-support.exp
standard_testfile
require allow_gdbserver_tests
if { [build_executable "failed to prepare" ${testfile}] } {
return -1
}
# Spawn GDBserver, run to main, extract GDBserver's PID and save it in
# the SERVER_PID global.
proc prepare {} {
global binfile gdb_prompt srcfile decimal
global server_pid
global GDBFLAGS
save_vars { GDBFLAGS } {
# If GDB and GDBserver are both running locally, set the sysroot to avoid
# reading files via the remote protocol.
if { ![is_remote host] && ![is_remote target] } {
set GDBFLAGS "$GDBFLAGS -ex \"set sysroot\""
}
clean_restart $binfile
}
# Make sure we're disconnected, in case we're testing with an
# extended-remote board, therefore already connected.
gdb_test "disconnect" ".*"
gdbserver_run ""
gdb_breakpoint ${srcfile}:[gdb_get_line_number "i = 0;"]
gdb_continue_to_breakpoint "after server_pid assignment"
# Get the pid of GDBServer.
set server_pid 0
gdb_test_multiple "p server_pid" "" {
-re -wrap " = ($decimal)" {
set server_pid $expect_out(1,string)
pass $gdb_test_name
}
}
if {$server_pid == 0} {
return 0
}
return 1
}
# Kill GDBserver using the PID saved by prepare.
proc kill_server {} {
global server_pid
remote_exec target "kill -9 $server_pid"
}
# Test issuing "tstatus" right after the connection is dropped.
proc_with_prefix test_tstatus {} {
if ![prepare] {
return
}
kill_server
# Enable trace status packet which is disabled after the
# connection if the remote target doesn't support tracepoint at
# all. Otherwise, no RSP packet is sent out.
gdb_test \
"set remote trace-status-packet on" \
"Support for the 'qTStatus' packet on the current remote target is set to \"on\"."
# Force GDB to talk with GDBserver, so that we can get the
# "connection closed" error.
gdb_test "tstatus" {Remote connection closed|Remote communication error\. Target disconnected: Connection reset by peer\.}
}
# Test unwinding with no debug/unwind info, right after the connection
# is dropped.
proc_with_prefix test_unwind_nosyms {} {
if ![prepare] {
return
}
# Remove symbols, so that we try to unwind with one of the
# heuristic unwinders, and read memory from within its sniffer.
gdb_unload
kill_server
gdb_test "bt" "(Target disconnected|Remote connection closed|Remote communication error).*"
}
# Test unwinding with debug/unwind info, right after the connection is
# dropped.
proc_with_prefix test_unwind_syms {} {
if ![prepare] {
return
}
kill_server
gdb_test "bt" "(Target disconnected|Remote connection closed|Remote communication error).*"
}
# Test performing a stepi right after the connection is dropped.
proc_with_prefix test_stepi {} {
if ![prepare] {
return
}
# Ensure GDB has computed the frame-id for the current frame
# before we kill the gdbserver. With the frame-id cached when we
# stepi below the first packets we try to send to gdbserver will
# be from within the breakpoint insertion process.
gdb_test "info frame" "Stack level 0, .*"
kill_server
gdb_test "stepi" "(Target disconnected|Remote connection closed|Remote communication error).*"
}
test_tstatus
test_unwind_nosyms
test_unwind_syms
test_stepi