This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFC v2 36/38] convert to_decr_pc_after_break
- From: Tom Tromey <tromey at redhat dot com>
- To: gdb-patches at sourceware dot org
- Cc: Tom Tromey <tromey at redhat dot com>
- Date: Thu, 6 Feb 2014 13:55:34 -0700
- Subject: [RFC v2 36/38] convert to_decr_pc_after_break
- Authentication-results: sourceware.org; auth=none
- References: <1391720136-2121-1-git-send-email-tromey at redhat dot com>
This converts to_decr_pc_after_break to the new style of delegation,
removing forward_target_decr_pc_after_break.
2014-02-06 Tom Tromey <tromey@redhat.com>
* record-btrace.c (record_btrace_decr_pc_after_break): Delegate
directly.
* target-delegates.c: Rebuild.
* target.h (struct target_ops) <to_decr_pc_after_break>: Use
TARGET_DEFAULT_FUNC.
* target.c (default_target_decr_pc_after_break): Rename from
forward_target_decr_pc_after_break. Simplify.
(target_decr_pc_after_break): Rely on delegation.
---
gdb/ChangeLog | 11 +++++++++++
gdb/record-btrace.c | 2 +-
gdb/target-delegates.c | 10 ++++++++++
gdb/target.c | 15 +++++++--------
gdb/target.h | 3 ++-
5 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
index 44882ad..c4872eb 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -1732,7 +1732,7 @@ record_btrace_decr_pc_after_break (struct target_ops *ops,
if (record_btrace_is_replaying (ops))
return 0;
- return forward_target_decr_pc_after_break (ops->beneath, gdbarch);
+ return ops->beneath->to_decr_pc_after_break (ops->beneath, gdbarch);
}
/* The to_find_new_threads method of target record-btrace. */
diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c
index 78e3c0d..d9c68cd 100644
--- a/gdb/target-delegates.c
+++ b/gdb/target-delegates.c
@@ -1572,6 +1572,13 @@ tdefault_augmented_libraries_svr4_read (struct target_ops *self)
return 0;
}
+static CORE_ADDR
+delegate_decr_pc_after_break (struct target_ops *self, struct gdbarch *arg1)
+{
+ self = self->beneath;
+ return self->to_decr_pc_after_break (self, arg1);
+}
+
static void
install_delegators (struct target_ops *ops)
{
@@ -1837,6 +1844,8 @@ install_delegators (struct target_ops *ops)
ops->to_call_history_range = delegate_call_history_range;
if (ops->to_augmented_libraries_svr4_read == NULL)
ops->to_augmented_libraries_svr4_read = delegate_augmented_libraries_svr4_read;
+ if (ops->to_decr_pc_after_break == NULL)
+ ops->to_decr_pc_after_break = delegate_decr_pc_after_break;
}
static void
@@ -1973,4 +1982,5 @@ install_dummy_methods (struct target_ops *ops)
ops->to_call_history_from = tdefault_call_history_from;
ops->to_call_history_range = tdefault_call_history_range;
ops->to_augmented_libraries_svr4_read = tdefault_augmented_libraries_svr4_read;
+ ops->to_decr_pc_after_break = default_target_decr_pc_after_break;
}
diff --git a/gdb/target.c b/gdb/target.c
index bded196..72d5a09 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -108,6 +108,9 @@ static int find_default_is_async_p (struct target_ops *ignore);
static enum exec_direction_kind default_execution_direction
(struct target_ops *self);
+static CORE_ADDR default_target_decr_pc_after_break (struct target_ops *ops,
+ struct gdbarch *gdbarch);
+
#include "target-delegates.c"
static void init_dummy_target (void);
@@ -3781,16 +3784,12 @@ target_get_tailcall_unwinder (void)
return NULL;
}
-/* See target.h. */
+/* Default implementation of to_decr_pc_after_break. */
-CORE_ADDR
-forward_target_decr_pc_after_break (struct target_ops *ops,
+static CORE_ADDR
+default_target_decr_pc_after_break (struct target_ops *ops,
struct gdbarch *gdbarch)
{
- for (; ops != NULL; ops = ops->beneath)
- if (ops->to_decr_pc_after_break != NULL)
- return ops->to_decr_pc_after_break (ops, gdbarch);
-
return gdbarch_decr_pc_after_break (gdbarch);
}
@@ -3799,7 +3798,7 @@ forward_target_decr_pc_after_break (struct target_ops *ops,
CORE_ADDR
target_decr_pc_after_break (struct gdbarch *gdbarch)
{
- return forward_target_decr_pc_after_break (current_target.beneath, gdbarch);
+ return current_target.to_decr_pc_after_break (¤t_target, gdbarch);
}
static int
diff --git a/gdb/target.h b/gdb/target.h
index 09fe10e..c988a01 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -1104,7 +1104,8 @@ struct target_ops
after executing a breakpoint instruction.
Defaults to gdbarch_decr_pc_after_break (GDBARCH). */
CORE_ADDR (*to_decr_pc_after_break) (struct target_ops *ops,
- struct gdbarch *gdbarch);
+ struct gdbarch *gdbarch)
+ TARGET_DEFAULT_FUNC (default_target_decr_pc_after_break);
int to_magic;
/* Need sub-structure for target machine related rather than comm related?
--
1.8.1.4