diff options
author | Andrew Cagney <cagney@redhat.com> | 2002-05-19 18:32:10 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2002-05-19 18:32:10 +0000 |
commit | 32366e8f2a2288669fd75107a09be7dbdb30ec3b (patch) | |
tree | 1c0215c9d47c04051a668f559838ba40e5544a6a /gdb/remote.c | |
parent | d07e1d7badd0fb89447cd1420dd1770f98db9c6b (diff) | |
download | gdb-32366e8f2a2288669fd75107a09be7dbdb30ec3b.tar.gz |
* remote.c (remote_start_remote_dummy): Add uiout parameter.
(remote_start_remote): Add uiout parameter. Pass through to
remote_start_remote_dummy.
(remote_open_1): Use catch_exception instead of catch_errors.
(remote_async_open_1): Ditto.
(remote_cisco_open): Ditto.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 65 |
1 files changed, 44 insertions, 21 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index 94277325b46..04045c67c15 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -86,7 +86,7 @@ static void remote_resume (ptid_t ptid, int step, enum target_signal siggnal); static void remote_async_resume (ptid_t ptid, int step, enum target_signal siggnal); -static int remote_start_remote (void *); +static int remote_start_remote (struct ui_out *uiout, void *dummy); static void remote_open (char *name, int from_tty); static void remote_async_open (char *name, int from_tty); @@ -2107,14 +2107,16 @@ remote_cisco_objfile_relocate (bfd_signed_vma text_off, bfd_signed_vma data_off, /* Stub for catch_errors. */ static int -remote_start_remote_dummy (void *dummy) +remote_start_remote_dummy (struct ui_out *uiout, void *dummy) { start_remote (); /* Initialize gdb process mechanisms */ + /* NOTE: Return something >=0. A -ve value is reserved for + catch_exceptions. */ return 1; } static int -remote_start_remote (void *dummy) +remote_start_remote (struct ui_out *uiout, void *dummy) { immediate_quit++; /* Allow user to interrupt it */ @@ -2131,7 +2133,9 @@ remote_start_remote (void *dummy) putpkt ("?"); /* initiate a query from remote machine */ immediate_quit--; - return remote_start_remote_dummy (dummy); + /* NOTE: See comment above in remote_start_remote_dummy(). This + function returns something >=0. */ + return remote_start_remote_dummy (uiout, dummy); } /* Open a connection to a remote debugger. @@ -2246,6 +2250,7 @@ static void remote_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" @@ -2308,12 +2313,23 @@ remote_open_1 (char *name, int from_tty, struct target_ops *target, no_shared_libraries (NULL, 0); #endif - /* Start the remote connection; if error (0), discard this target. - In particular, if the user quits, be sure to discard it - (we'd be in an inconsistent state otherwise). */ - if (!catch_errors (remote_start_remote, NULL, - "Couldn't establish connection to remote target\n", - RETURN_MASK_ALL)) + /* Start the remote connection. If error() or QUIT, discard this + target (we'd otherwise be in an inconsistent state). + + FIXME: cagney/2002-05-19: Instead of re-throwing the exception, + this function should return an error indication letting the + caller restore the previous state. Unfortunatly the command + ``target remote'' is directly wired to this function making that + impossible. On a positive note, the CLI side of this problem has + been fixed - the function set_cmd_context() makes it possible for + all the ``target ....'' commands to share a common callback + function. See cli-dump.c. */ + ex = catch_exceptions (uiout, + remote_start_remote, NULL, + "Couldn't establish connection to remote" + " target\n", + RETURN_MASK_ALL); + if (ex < 0) { pop_target (); return; @@ -2347,6 +2363,7 @@ 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" @@ -2419,12 +2436,14 @@ remote_async_open_1 (char *name, int from_tty, struct target_ops *target, no_shared_libraries (NULL, 0); #endif - /* Start the remote connection; if error (0), discard this target. - In particular, if the user quits, be sure to discard it - (we'd be in an inconsistent state otherwise). */ - if (!catch_errors (remote_start_remote, NULL, - "Couldn't establish connection to remote target\n", - RETURN_MASK_ALL)) + /* Start the remote connection; if error, discard this target. See + the comments in remote_open_1() for further details. */ + 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; @@ -5472,6 +5491,7 @@ remote_info_process (char *args, int from_tty) static void remote_cisco_open (char *name, int from_tty) { + int ex; if (name == 0) error ("To open a remote debug connection, you need to specify what \n" "device is attached to the remote system (e.g. host:port)."); @@ -5534,11 +5554,14 @@ remote_cisco_open (char *name, int from_tty) someday have a notion of debugging several processes. */ inferior_ptid = pid_to_ptid (MAGIC_NULL_PID); - /* Start the remote connection; if error (0), discard this target. */ - - if (!catch_errors (remote_start_remote_dummy, (char *) 0, - "Couldn't establish connection to remote target\n", - RETURN_MASK_ALL)) + /* Start the remote connection; if error, discard this target. See + the comments in remote_open_1() for further details. */ + ex = catch_exceptions (uiout, + remote_start_remote_dummy, NULL, + "Couldn't establish connection to remote" + " target\n", + RETURN_MASK_ALL); + if (ex < 0) { pop_target (); return; |