[review] Introduce win32_target_ops::decr_pc_after_break

Message ID gerrit.1572371871000.I2f412d4f597406d9045bcf5a18a205c6d8974db2@gnutoolchain-gerrit.osci.io
State New, archived
Headers

Commit Message

Simon Marchi (Code Review) Oct. 29, 2019, 5:57 p.m. UTC
  Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/431
......................................................................

Introduce win32_target_ops::decr_pc_after_break

This adds a decr_pc_after_break member to win32_target_ops and updates
the two Windows targets to set it.

Note that I can't test the win32-arm-low.c change.

Change-Id: Ie0092b0cecb913e80d05e4e3e72fe800e090305e

gdb/gdbserver/ChangeLog
2019-10-29  Tom Tromey  <tromey@adacore.com>

	* win32-low.h (struct win32_target_ops) <decr_pc_after_break>: New
	field.
	* win32-i386-low.c (the_low_target): Update.
	* win32-arm-low.c (the_low_target): Update.

Change-Id: I2f412d4f597406d9045bcf5a18a205c6d8974db2
---
M gdb/gdbserver/ChangeLog
M gdb/gdbserver/win32-arm-low.c
M gdb/gdbserver/win32-i386-low.c
M gdb/gdbserver/win32-low.h
4 files changed, 13 insertions(+), 0 deletions(-)
  

Comments

Simon Marchi (Code Review) Nov. 21, 2019, 6:44 p.m. UTC | #1
Pedro Alves has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/431
......................................................................


Patch Set 1: Code-Review+2

OK.

If ARM needed a value != 0, then this would need to be a function, since ARM/Thumb/Thumb-2 have breakpoint instructions with different widths.  But it doesn't, so this is OK as is.
  

Patch

diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index fb2fbef..a6896d6 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,12 @@ 
 2019-10-29  Tom Tromey  <tromey@adacore.com>
 
+	* win32-low.h (struct win32_target_ops) <decr_pc_after_break>: New
+	field.
+	* win32-i386-low.c (the_low_target): Update.
+	* win32-arm-low.c (the_low_target): Update.
+
+2019-10-29  Tom Tromey  <tromey@adacore.com>
+
 	* win32-low.c (win32_read_pc, win32_write_pc): New functions.
 	(win32_target_ops): Update.
 	* win32-i386-low.c (i386_win32_get_pc, i386_win32_set_pc): New
diff --git a/gdb/gdbserver/win32-arm-low.c b/gdb/gdbserver/win32-arm-low.c
index f2052c6..ee1e7f5 100644
--- a/gdb/gdbserver/win32-arm-low.c
+++ b/gdb/gdbserver/win32-arm-low.c
@@ -142,6 +142,7 @@ 
   NULL, /* single_step */
   (const unsigned char *) &arm_wince_breakpoint,
   arm_wince_breakpoint_len,
+  0,
   arm_win32_get_pc,
   arm_win32_set_pc,
   /* Watchpoint related functions.  See target.h for comments.  */
diff --git a/gdb/gdbserver/win32-i386-low.c b/gdb/gdbserver/win32-i386-low.c
index 421f969..b5766b7 100644
--- a/gdb/gdbserver/win32-i386-low.c
+++ b/gdb/gdbserver/win32-i386-low.c
@@ -500,6 +500,7 @@ 
   i386_single_step,
   &i386_win32_breakpoint,
   i386_win32_breakpoint_len,
+  1,
   i386_win32_get_pc,
   i386_win32_set_pc,
   i386_supports_z_point_type,
diff --git a/gdb/gdbserver/win32-low.h b/gdb/gdbserver/win32-low.h
index 73ceb4b..3ada7c8 100644
--- a/gdb/gdbserver/win32-low.h
+++ b/gdb/gdbserver/win32-low.h
@@ -63,6 +63,10 @@ 
   const unsigned char *breakpoint;
   int breakpoint_len;
 
+  /* Amount by which to decrement the PC after a breakpoint is
+     hit.  */
+  int decr_pc_after_break;
+
   /* Get the PC register from REGCACHE.  */
   CORE_ADDR (*get_pc) (struct regcache *regcache);
   /* Set the PC register in REGCACHE.  */