summaryrefslogtreecommitdiff
path: root/gdb/testsuite/lib/gdbserver-support.exp
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2008-01-30 00:51:50 +0000
committerDaniel Jacobowitz <dan@debian.org>2008-01-30 00:51:50 +0000
commitef378e83937c25e9da9c4e545bb1a8bb5fd767f1 (patch)
treecfc8d7c5a8d9fd258e3b8181b3b24430b464a4fc /gdb/testsuite/lib/gdbserver-support.exp
parentf76fd3ce0c566171866fa3e7291a30e1e3267db9 (diff)
downloadgdb-ef378e83937c25e9da9c4e545bb1a8bb5fd767f1.tar.gz
* linux-low.c (linux_attach_lwp): Do not _exit after errors.
(linux_kill, linux_detach): Clean up the process list. * remote-utils.c (remote_open): Improve port number parsing. (putpkt_binary, input_interrupt): Only send interrupts if the target is running. * server.c (extended_protocol): Make static. (attached): Define earlier. (exit_requested, response_needed, program_argv): New variables. (target_running): New. (start_inferior): Clear attached here. (attach_inferior): Set attached here. (require_running): Define. (handle_query): Use require_running and target_running. Implement "monitor exit". (handle_v_attach, handle_v_run): New. (handle_v_requests): Use require_running. Handle vAttach and vRun. (gdbserver_usage): Update. (main): Redo argument parsing. Handle --debug and --multi. Handle --attach along with other options or after the port. Save program_argv. Support no initial program. Resynchronize communication with GDB after an error. Handle "monitor exit". Use require_running and target_running. Always allow the extended protocol. Do not error out for Hc0 or Hc-1. Do not automatically restart in extended mode. * README: Refer to the GDB manual. Update --attach usage. * remote.c (struct remote_state): Add cached_wait_status. (remote_exec_file): New variable. (PACKET_vAttach, PACKET_vRun): New constants. (extended_remote_restart): Do not query for status. (struct start_remote_args): New. (remote_start_remote): Take it as a second argument. Check whether the target is running. Issue an error for non-running non-extended targets. Cache the wait status. Set inferior_ptid here. (remote_open_1): Prompt to disconnect non-running targets. Make sure the target is marked running. Do not set inferior_ptid here. Update call to remote_start_remote. Do not call remote_check_symbols if the target is not running. (remote_detach_1): Rename from remote_detach. Take an EXTENDED argument. Handle a non-running target. (remote_detach): Use it. (extended_remote_detach): New. (remote_disconnect): Fix typo. Use remoute_mourn_1. (extended_remote_attach_1, extended_remote_attach) (extended_async_remote_attach): New. (remote_vcont_resume): Remove unused variable. (remote_wait, remote_async_wait): Use any cached wait status. (putpkt_binary, getpkt): Clear any cached wait status. (extended_remoute_mourn_1): New. (extended_remote_mourn): Use it. (extended_async_remote_mourn, extended_remote_run): New. (extended_remote_create_inferior_1): New. (extended_remote_create_inferior): Use it. (extended_remote_async_create_inferior): Likewise. (remote_xfer_partial): Skip for non-executing targets. (init_extended_remote_ops): Set to_detach and to_attach. (init_extended_async_remote_ops): Likewise. Use extended_async_remote_mourn. (_initialize_remote): Register vAttach, vRun, and set remote exec-file. * NEWS: Mention vAttach, vRun, and gdbserver extended-remote support. * gdb.server/ext-attach.c, gdb.server/ext-attach.exp, gdb.server/ext-run.exp: New files. * lib/gdbserver-support.exp (gdbserver_download): New. (gdbserver_start): New. Update gdbserver expected output. (gdbserver_spawn): Use them. (gdbserver_start_extended): New. * gdb.texinfo (Using the `gdbserver' Program): Add security warning. Rearrange into subsections and subsubsections. Document --multi and --debug. Correct --with-sysroot typo. Update --attach usage. Make load reference clearer. Document monitor exit. (Remote Configuration): Document set remote exec-file, attach-packet, and run-packet. (Packets): Document vAttach and vRun.
Diffstat (limited to 'gdb/testsuite/lib/gdbserver-support.exp')
-rw-r--r--gdb/testsuite/lib/gdbserver-support.exp69
1 files changed, 52 insertions, 17 deletions
diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp
index 50dafe01937..6fbaa224386 100644
--- a/gdb/testsuite/lib/gdbserver-support.exp
+++ b/gdb/testsuite/lib/gdbserver-support.exp
@@ -132,13 +132,10 @@ proc skip_gdbserver_tests { } {
return 0
}
-# Start a gdbserver process running SERVER_EXEC, and connect GDB
-# to it. CHILD_ARGS are passed to the inferior.
-#
-# Returns the target protocol and socket to connect to.
+# Download the currently loaded program to the target if necessary.
+# Return the target system filename.
-proc gdbserver_spawn { child_args } {
- global portnum
+proc gdbserver_download { } {
global gdbserver_host_exec
global gdbserver_host_mtime
global gdbserver_server_exec
@@ -172,6 +169,17 @@ proc gdbserver_spawn { child_args } {
}
}
+ return $gdbserver_server_exec
+}
+
+# Start a gdbserver process with initial OPTIONS and trailing ARGUMENTS.
+# The port will be filled in between them automatically.
+#
+# Returns the target protocol and socket to connect to.
+
+proc gdbserver_start { options arguments } {
+ global portnum
+
# Port id -- either specified in baseboard file, or managed here.
if [target_info exists gdb,socketport] {
set portnum [target_info gdb,socketport]
@@ -182,7 +190,7 @@ proc gdbserver_spawn { child_args } {
# Extract the local and remote host ids from the target board struct.
if [target_info exists sockethost] {
- set debughost [target_info sockethost]
+ set debughost [target_info sockethost]
} else {
set debughost "localhost:"
}
@@ -199,23 +207,23 @@ proc gdbserver_spawn { child_args } {
# Export the host:port pair.
set gdbport $debughost$portnum
- # Fire off the debug agent. This flavour of gdbserver takes as
- # arguments the port information, the name of the executable file to
- # be debugged, and any arguments.
- set gdbserver_command "$gdbserver :$portnum $gdbserver_server_exec"
- if { $child_args != "" } {
- append gdbserver_command " $child_args"
+ # Fire off the debug agent.
+ set gdbserver_command "$gdbserver"
+ if { $options != "" } {
+ append gdbserver_command " $options"
+ }
+ append gdbserver_command " :$portnum"
+ if { $arguments != "" } {
+ append gdbserver_command " $arguments"
}
set server_spawn_id [remote_spawn target $gdbserver_command]
- # Wait for the server to produce at least one line and an additional
- # character of output. This will wait until any TCP socket has been
- # created, so that GDB can connect.
+ # Wait for the server to open its TCP socket, so that GDB can connect.
expect {
-i $server_spawn_id
-notransfer
- -re ".*\n." { }
+ -re "Listening on" { }
}
# We can't just call close, because if gdbserver is local then that means
@@ -234,6 +242,24 @@ proc gdbserver_spawn { child_args } {
return [list $protocol $gdbport]
}
+# Start a gdbserver process running SERVER_EXEC, and connect GDB
+# to it. CHILD_ARGS are passed to the inferior.
+#
+# Returns the target protocol and socket to connect to.
+
+proc gdbserver_spawn { child_args } {
+ set target_exec [gdbserver_download]
+
+ # Fire off the debug agent. This flavour of gdbserver takes as
+ # arguments the port information, the name of the executable file to
+ # be debugged, and any arguments.
+ set arguments "$target_exec"
+ if { $child_args != "" } {
+ append arguments " $child_args"
+ }
+ return [gdbserver_start "" $arguments]
+}
+
# Start a gdbserver process running HOST_EXEC and pass CHILD_ARGS
# to it. Return 0 on success, or non-zero on failure.
@@ -271,3 +297,12 @@ proc gdbserver_reconnect { } {
return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
}
+
+# Start and connect to a gdbserver in extended mode.
+proc gdbserver_start_extended { } {
+ set res [gdbserver_start "--multi" ""]
+ set gdbserver_protocol "extended-[lindex $res 0]"
+ set gdbserver_gdbport [lindex $res 1]
+
+ return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
+}