This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC v2 36/38] convert to_decr_pc_after_break


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 (&current_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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]