diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/target-delegates.c | 16 | ||||
-rw-r--r-- | gdb/target.c | 17 | ||||
-rw-r--r-- | gdb/target.h | 3 |
4 files changed, 29 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index aa699ba..18792c6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2014-02-19 Tom Tromey <tromey@redhat.com> + * target-delegates.c: Rebuild. + * target.c (target_disconnect): Unconditionally delegate. + * target.h (struct target_ops) <to_disconnect>: Use + TARGET_DEFAULT_NORETURN. + +2014-02-19 Tom Tromey <tromey@redhat.com> + * record.c (record_stop): Unconditionally delegate. * target-delegates.c: Rebuild. * target.c (target_stop_recording): Unconditionally delegate. diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c index 4b90a2f..1565c78 100644 --- a/gdb/target-delegates.c +++ b/gdb/target-delegates.c @@ -35,6 +35,19 @@ tdefault_detach (struct target_ops *self, const char *arg1, int arg2) } static void +delegate_disconnect (struct target_ops *self, char *arg1, int arg2) +{ + self = self->beneath; + self->to_disconnect (self, arg1, arg2); +} + +static void +tdefault_disconnect (struct target_ops *self, char *arg1, int arg2) +{ + tcomplain (); +} + +static void delegate_resume (struct target_ops *self, ptid_t arg1, int arg2, enum gdb_signal arg3) { self = self->beneath; @@ -1542,6 +1555,8 @@ install_delegators (struct target_ops *ops) ops->to_post_attach = delegate_post_attach; if (ops->to_detach == NULL) ops->to_detach = delegate_detach; + if (ops->to_disconnect == NULL) + ops->to_disconnect = delegate_disconnect; if (ops->to_resume == NULL) ops->to_resume = delegate_resume; if (ops->to_wait == NULL) @@ -1800,6 +1815,7 @@ install_dummy_methods (struct target_ops *ops) ops->to_attach = find_default_attach; ops->to_post_attach = tdefault_post_attach; ops->to_detach = tdefault_detach; + ops->to_disconnect = tdefault_disconnect; ops->to_resume = tdefault_resume; ops->to_wait = tdefault_wait; ops->to_fetch_registers = tdefault_fetch_registers; diff --git a/gdb/target.c b/gdb/target.c index ef7374e..bf93220 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -2470,24 +2470,15 @@ target_detach (const char *args, int from_tty) void target_disconnect (char *args, int from_tty) { - struct target_ops *t; - /* If we're in breakpoints-always-inserted mode or if breakpoints are global across processes, we have to remove them before disconnecting. */ remove_breakpoints (); - for (t = current_target.beneath; t != NULL; t = t->beneath) - if (t->to_disconnect != NULL) - { - if (targetdebug) - fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n", - args, from_tty); - t->to_disconnect (t, args, from_tty); - return; - } - - tcomplain (); + if (targetdebug) + fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n", + args, from_tty); + current_target.to_disconnect (¤t_target, args, from_tty); } ptid_t diff --git a/gdb/target.h b/gdb/target.h index 1437cc4..1ceb74d 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -409,7 +409,8 @@ struct target_ops TARGET_DEFAULT_IGNORE (); void (*to_detach) (struct target_ops *ops, const char *, int) TARGET_DEFAULT_IGNORE (); - void (*to_disconnect) (struct target_ops *, char *, int); + void (*to_disconnect) (struct target_ops *, char *, int) + TARGET_DEFAULT_NORETURN (tcomplain ()); void (*to_resume) (struct target_ops *, ptid_t, int, enum gdb_signal) TARGET_DEFAULT_NORETURN (noprocess ()); ptid_t (*to_wait) (struct target_ops *, |