summaryrefslogtreecommitdiff
path: root/gdb/remote-mips.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2013-05-30 17:03:00 +0000
committerTom Tromey <tromey@redhat.com>2013-05-30 17:03:00 +0000
commit88f77f91c9b0a13109802f2bb44a9d42c16f91ea (patch)
treeb99629244e10d762f8be867ec33997332bac6870 /gdb/remote-mips.c
parent2ee2dd5484d40040254d5ac82c3d07de5057abfe (diff)
downloadgdb-88f77f91c9b0a13109802f2bb44a9d42c16f91ea.tar.gz
cleanup fixes for remote-mips.c
remote-mips.c has a few 'return's where cleanups are not run. * remote-mips.c (mips_exit_debug): Call do_cleanups on all return paths. (mips_initialize): Likewise. (common_open): Call do_cleanups.
Diffstat (limited to 'gdb/remote-mips.c')
-rw-r--r--gdb/remote-mips.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/gdb/remote-mips.c b/gdb/remote-mips.c
index 3b65b59f124..1619622b992 100644
--- a/gdb/remote-mips.c
+++ b/gdb/remote-mips.c
@@ -1386,13 +1386,19 @@ mips_exit_debug (void)
mips_request ('x', 0, 0, NULL, mips_receive_wait, NULL);
mips_need_reply = 0;
if (!mips_expect (" break!"))
- return -1;
+ {
+ do_cleanups (old_cleanups);
+ return -1;
+ }
}
else
mips_request ('x', 0, 0, &err, mips_receive_wait, NULL);
if (!mips_expect (mips_monitor_prompt))
- return -1;
+ {
+ do_cleanups (old_cleanups);
+ return -1;
+ }
do_cleanups (old_cleanups);
@@ -1406,7 +1412,7 @@ static void
mips_initialize (void)
{
int err;
- struct cleanup *old_cleanups = make_cleanup (mips_initialize_cleanups, NULL);
+ struct cleanup *old_cleanups;
int j;
/* What is this code doing here? I don't see any way it can happen, and
@@ -1419,6 +1425,8 @@ mips_initialize (void)
return;
}
+ old_cleanups = make_cleanup (mips_initialize_cleanups, NULL);
+
mips_wait_flag = 0;
mips_initializing = 1;
@@ -1543,6 +1551,7 @@ common_open (struct target_ops *ops, char *name, int from_tty,
char *remote_name = 0;
char *local_name = 0;
char **argv;
+ struct cleanup *cleanup;
if (name == 0)
error (_("\
@@ -1558,7 +1567,7 @@ seen from the board via TFTP, specify that name as the third parameter.\n"));
/* Parse the serial port name, the optional TFTP name, and the
optional local TFTP name. */
argv = gdb_buildargv (name);
- make_cleanup_freeargv (argv);
+ cleanup = make_cleanup_freeargv (argv);
serial_port_name = xstrdup (argv[0]);
if (argv[1]) /* Remote TFTP name specified? */
@@ -1655,6 +1664,8 @@ seen from the board via TFTP, specify that name as the third parameter.\n"));
stop_pc = regcache_read_pc (get_current_regcache ());
print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
xfree (serial_port_name);
+
+ do_cleanups (cleanup);
}
/* Open a connection to an IDT board. */