diff options
author | Daniel Jacobowitz <drow@false.org> | 2002-08-18 23:17:57 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2002-08-18 23:17:57 +0000 |
commit | 92d1e3318675011dcd5dc89e25312daf0f109857 (patch) | |
tree | 8a34fc611de13dad228f2dd81ef24e6d992ed3fb /gdb/remote.c | |
parent | 247055dee09f59697d85a72396eeea2453c55b82 (diff) | |
download | gdb-92d1e3318675011dcd5dc89e25312daf0f109857.zip gdb-92d1e3318675011dcd5dc89e25312daf0f109857.tar.gz gdb-92d1e3318675011dcd5dc89e25312daf0f109857.tar.bz2 |
* remote.c (remote_open_1): Add async_p.
(remote_async_open_1): Delete.
(open_remote_target): Delete.
(remote_open, extended_remote_open): Update calls to remote_open_1.
(remote_async_open, extended_remote_async_open): Call
remote_open_1 instead of remote_async_open_1.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 173 |
1 files changed, 31 insertions, 142 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index de64cc0..1584d6b 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -94,9 +94,8 @@ static void remote_async_open (char *name, int from_tty); static void extended_remote_open (char *name, int from_tty); static void extended_remote_async_open (char *name, int from_tty); -static void remote_open_1 (char *, int, struct target_ops *, int extended_p); -static void remote_async_open_1 (char *, int, struct target_ops *, - int extended_p); +static void remote_open_1 (char *, int, struct target_ops *, int extended_p, + int async_p); static void remote_close (int quitting); @@ -205,10 +204,6 @@ static void show_packet_config_cmd (struct packet_config *config); static void update_packet_config (struct packet_config *config); -/* Define the target subroutine names */ - -void open_remote_target (char *, int, struct target_ops *, int); - void _initialize_remote (void); /* Description of the remote protocol. Strictly speaking, when the @@ -2160,14 +2155,14 @@ remote_start_remote (struct ui_out *uiout, void *dummy) static void remote_open (char *name, int from_tty) { - remote_open_1 (name, from_tty, &remote_ops, 0); + remote_open_1 (name, from_tty, &remote_ops, 0, 0); } /* Just like remote_open, but with asynchronous support. */ static void remote_async_open (char *name, int from_tty) { - remote_async_open_1 (name, from_tty, &remote_async_ops, 0); + remote_open_1 (name, from_tty, &remote_async_ops, 0, 1); } /* Open a connection to a remote debugger using the extended @@ -2176,14 +2171,16 @@ remote_async_open (char *name, int from_tty) static void extended_remote_open (char *name, int from_tty) { - remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */ ); + remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */, + 0 /* async_p */); } /* Just like extended_remote_open, but with asynchronous support. */ static void extended_remote_async_open (char *name, int from_tty) { - remote_async_open_1 (name, from_tty, &extended_async_remote_ops, 1 /*extended_p */ ); + remote_open_1 (name, from_tty, &extended_async_remote_ops, + 1 /*extended_p */, 1 /* async_p */); } /* Generic code for opening a connection to a remote target. */ @@ -2264,7 +2261,7 @@ remote_serial_open (char *name) static void remote_open_1 (char *name, int from_tty, struct target_ops *target, - int extended_p) + int extended_p, int async_p) { int ex; struct remote_state *rs = get_remote_state (); @@ -2274,7 +2271,8 @@ remote_open_1 (char *name, int from_tty, struct target_ops *target, "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."); /* See FIXME above */ - wait_forever_enabled_p = 1; + if (!async_p) + wait_forever_enabled_p = 1; target_preopen (from_tty); @@ -2324,6 +2322,22 @@ remote_open_1 (char *name, int from_tty, struct target_ops *target, someday have a notion of debugging several processes. */ inferior_ptid = pid_to_ptid (MAGIC_NULL_PID); + + if (async_p) + { + /* With this target we start out by owning the terminal. */ + remote_async_terminal_ours_p = 1; + + /* FIXME: cagney/1999-09-23: During the initial connection it is + assumed that the target is already ready and able to respond to + requests. Unfortunately remote_start_remote() eventually calls + wait_for_inferior() with no timeout. wait_forever_enabled_p gets + around this. Eventually a mechanism that allows + wait_for_inferior() to expect/get timeouts will be + implemented. */ + wait_forever_enabled_p = 0; + } + #ifdef SOLIB_CREATE_INFERIOR_HOOK /* First delete any symbols previously loaded from shared libraries. */ no_shared_libraries (NULL, 0); @@ -2352,126 +2366,13 @@ remote_open_1 (char *name, int from_tty, struct target_ops *target, if (ex < 0) { pop_target (); + if (async_p) + wait_forever_enabled_p = 1; throw_exception (ex); } - if (extended_p) - { - /* Tell the remote that we are using the extended protocol. */ - char *buf = alloca (rs->remote_packet_size); - putpkt ("!"); - getpkt (buf, (rs->remote_packet_size), 0); - } -#ifdef SOLIB_CREATE_INFERIOR_HOOK - /* FIXME: need a master target_open vector from which all - remote_opens can be called, so that stuff like this can - go there. Failing that, the following code must be copied - to the open function for any remote target that wants to - support svr4 shared libraries. */ - - /* Set up to detect and load shared libraries. */ - if (exec_bfd) /* No use without an exec file. */ - { - SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid)); - remote_check_symbols (symfile_objfile); - } -#endif -} - -/* Just like remote_open but with asynchronous support. */ -static void -remote_async_open_1 (char *name, int from_tty, struct target_ops *target, - int extended_p) -{ - int ex; - struct remote_state *rs = get_remote_state (); - if (name == 0) - error ("To open a remote debug connection, you need to specify what\n" - "serial device is attached to the remote system\n" - "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."); - - target_preopen (from_tty); - - unpush_target (target); - - remote_desc = remote_serial_open (name); - if (!remote_desc) - perror_with_name (name); - - if (baud_rate != -1) - { - if (serial_setbaudrate (remote_desc, baud_rate)) - { - serial_close (remote_desc); - perror_with_name (name); - } - } - - serial_raw (remote_desc); - - /* If there is something sitting in the buffer we might take it as a - response to a command, which would be bad. */ - serial_flush_input (remote_desc); - - if (from_tty) - { - puts_filtered ("Remote debugging using "); - puts_filtered (name); - puts_filtered ("\n"); - } - - push_target (target); /* Switch to using remote target now */ - - init_all_packet_configs (); - - general_thread = -2; - continue_thread = -2; - - /* Probe for ability to use "ThreadInfo" query, as required. */ - use_threadinfo_query = 1; - use_threadextra_query = 1; - - /* Without this, some commands which require an active target (such - as kill) won't work. This variable serves (at least) double duty - as both the pid of the target process (if it has such), and as a - flag indicating that a target is active. These functions should - be split out into seperate variables, especially since GDB will - someday have a notion of debugging several processes. */ - inferior_ptid = pid_to_ptid (MAGIC_NULL_PID); - - /* With this target we start out by owning the terminal. */ - remote_async_terminal_ours_p = 1; - - /* FIXME: cagney/1999-09-23: During the initial connection it is - assumed that the target is already ready and able to respond to - requests. Unfortunately remote_start_remote() eventually calls - wait_for_inferior() with no timeout. wait_forever_enabled_p gets - around this. Eventually a mechanism that allows - wait_for_inferior() to expect/get timeouts will be - implemented. */ - wait_forever_enabled_p = 0; - -#ifdef SOLIB_CREATE_INFERIOR_HOOK - /* First delete any symbols previously loaded from shared libraries. */ - no_shared_libraries (NULL, 0); -#endif - - /* Start the remote connection; if error, discard this target. See - the comments in remote_open_1() for further details such as the - need to re-throw the exception. */ - ex = catch_exceptions (uiout, - remote_start_remote, NULL, - "Couldn't establish connection to remote" - " target\n", - RETURN_MASK_ALL); - if (ex < 0) - { - pop_target (); - wait_forever_enabled_p = 1; - throw_exception (ex); - } - - wait_forever_enabled_p = 1; + if (async_p) + wait_forever_enabled_p = 1; if (extended_p) { @@ -5077,18 +4978,6 @@ push_remote_target (char *name, int from_tty) remote_open (name, from_tty); } -/* Other targets want to use the entire remote serial module but with - certain remote_ops overridden. */ - -void -open_remote_target (char *name, int from_tty, struct target_ops *target, - int extended_p) -{ - printf_filtered ("Selecting the %sremote protocol\n", - (extended_p ? "extended-" : "")); - remote_open_1 (name, from_tty, target, extended_p); -} - /* Table used by the crc32 function to calcuate the checksum. */ static unsigned long crc32_table[256] = |