This is the mail archive of the 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]

[PATCH v2 2/7] Add breakpoint_from_kind target_ops for software breakpoints in GDBServer.

This patch is in preparation for software breakpoints on ARM in

This patch introduces a new target_ops and linux_target_ops called
breakpoint_from_kind that will be used to ask the target for the right
breakpoint for a kind as set in a Z0 packet.

No regressions, tested on ubuntu 14.04 ARMv7 and x86.
With gdbserver-{native,extended} / { -marm -mthumb }

	* linux-low.c (linux_breakpoint_from_kind): New function.
	(struct target_ops) <breakpoint_from_kind>: Initialize field.
	* linux-low.h (struct linux_target_ops)
	<breakpoint_from_kind>: New field.
	* target.h (struct target_ops) <breakpoint_from_kind>: New field.
 gdb/gdbserver/linux-low.c | 10 ++++++++++
 gdb/gdbserver/linux-low.h |  4 ++++
 gdb/gdbserver/target.h    |  4 ++++
 3 files changed, 18 insertions(+)

diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index dc16fe0..5aa2b1d 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -5965,6 +5965,15 @@ linux_supports_range_stepping (void)
   return (*the_low_target.supports_range_stepping) ();
+static const unsigned char*
+linux_breakpoint_from_kind (int *kind)
+  if (*the_low_target.breakpoint_from_kind != NULL)
+    return (*the_low_target.breakpoint_from_kind) (kind);
+  else
+    return NULL;
 /* Enumerate spufs IDs for process PID.  */
 static int
 spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
@@ -7040,6 +7049,7 @@ static struct target_ops linux_target_ops = {
+  linux_breakpoint_from_kind
 static void
diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h
index a9964ac..cc19b88 100644
--- a/gdb/gdbserver/linux-low.h
+++ b/gdb/gdbserver/linux-low.h
@@ -227,6 +227,10 @@ struct linux_target_ops
   /* Returns true if the low target supports range stepping.  */
   int (*supports_range_stepping) (void);
+  /* Returns the proper breakpoint from size, the kind can have target
+     specific meaning like the z0 kind parameter */
+  const unsigned char *(*breakpoint_from_kind) (int *kind);
 extern struct linux_target_ops the_low_target;
diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h
index 603819e..74fb36d 100644
--- a/gdb/gdbserver/target.h
+++ b/gdb/gdbserver/target.h
@@ -446,6 +446,10 @@ struct target_ops
      can be NULL, the default breakpoint for the target should be returned in
      this case.  */
   const unsigned char *(*breakpoint_from_pc) (CORE_ADDR *pcptr, int *lenptr);
+  /* Returns a breakpoint from a kind, a kind is a length can have target
+     specific meaning like the z0 kind parameter.  */
+  const unsigned char *(*breakpoint_from_kind) (int *kind);
 extern struct target_ops *the_target;

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