[v2,38/58] gdbserver: turn target ops 'read_pc' and 'write_pc' into methods

Message ID c7ef95e6ce0fa69f9bdd3d335051fc2130eb626a.1581956647.git.tankut.baris.aktemur@intel.com
State New, archived
Headers

Commit Message

Tankut Baris Aktemur Feb. 17, 2020, 4:57 p.m. UTC
  gdbserver/ChangeLog:
2020-02-10  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	Turn process_stratum_target's read_pc and write_pc ops into
	methods of process_target.

	* target.h (struct process_stratum_target): Remove the target ops.
	(class process_target): Add the target ops.
	* target.cc (process_target::read_pc): Define.
	(process_target::write_pc): Define.

	Update the derived classes and callers below.

	* regcache.cc (regcache_read_pc): Update.
	(regcache_write_pc): Update.
	* linux-low.cc (linux_target_ops): Update.
	(linux_read_pc): Turn into ...
	(linux_process_target::read_pc): ... this.
	(linux_write_pc): Turn into ...
	(linux_process_target::write_pc): ... this.
	* linux-low.h (class linux_process_target): Update.
	* lynx-low.cc (lynx_target_ops): Update.
	* nto-low.cc (nto_target_ops): Update.
	* win32-low.cc (win32_target_ops): Update.
---
 gdbserver/linux-low.cc | 10 ++++------
 gdbserver/linux-low.h  |  4 ++++
 gdbserver/lynx-low.cc  |  2 --
 gdbserver/nto-low.cc   |  2 --
 gdbserver/regcache.cc  | 16 ++--------------
 gdbserver/target.cc    | 12 ++++++++++++
 gdbserver/target.h     | 12 ++++++------
 gdbserver/win32-low.cc |  2 --
 8 files changed, 28 insertions(+), 32 deletions(-)
  

Patch

diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index 5e325eb0e7f..8065632a476 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -6551,8 +6551,8 @@  linux_process_target::supports_tracepoints ()
   return (*the_low_target.supports_tracepoints) ();
 }
 
-static CORE_ADDR
-linux_read_pc (struct regcache *regcache)
+CORE_ADDR
+linux_process_target::read_pc (regcache *regcache)
 {
   if (the_low_target.get_pc == NULL)
     return 0;
@@ -6560,8 +6560,8 @@  linux_read_pc (struct regcache *regcache)
   return (*the_low_target.get_pc) (regcache);
 }
 
-static void
-linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
+void
+linux_process_target::write_pc (regcache *regcache, CORE_ADDR pc)
 {
   gdb_assert (the_low_target.set_pc != NULL);
 
@@ -7445,8 +7445,6 @@  linux_get_hwcap2 (int wordsize)
 static linux_process_target the_linux_target;
 
 static process_stratum_target linux_target_ops = {
-  linux_read_pc,
-  linux_write_pc,
   linux_thread_stopped,
   NULL,
   linux_pause_all,
diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h
index 1d71ff51cf2..67a36c8a67d 100644
--- a/gdbserver/linux-low.h
+++ b/gdbserver/linux-low.h
@@ -388,6 +388,10 @@  public:
   void process_qsupported (char **features, int count) override;
 
   bool supports_tracepoints () override;
+
+  CORE_ADDR read_pc (regcache *regcache) override;
+
+  void write_pc (regcache *regcache, CORE_ADDR pc) override;
 };
 
 #define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr)))
diff --git a/gdbserver/lynx-low.cc b/gdbserver/lynx-low.cc
index 5a0648987c7..2ac59c3c14a 100644
--- a/gdbserver/lynx-low.cc
+++ b/gdbserver/lynx-low.cc
@@ -735,8 +735,6 @@  static lynx_process_target the_lynx_target;
 /* The LynxOS target_ops vector.  */
 
 static process_stratum_target lynx_target_ops = {
-  NULL,  /* read_pc */
-  NULL,  /* write_pc */
   NULL,  /* thread_stopped */
   NULL,  /* get_tib_address */
   NULL,  /* pause_all */
diff --git a/gdbserver/nto-low.cc b/gdbserver/nto-low.cc
index efb342f5938..2b5b02b69bd 100644
--- a/gdbserver/nto-low.cc
+++ b/gdbserver/nto-low.cc
@@ -947,8 +947,6 @@  nto_sw_breakpoint_from_kind (int kind, int *size)
 static nto_process_target the_nto_target;
 
 static process_stratum_target nto_target_ops = {
-  NULL, /* read_pc */
-  NULL, /* write_pc */
   NULL, /* thread_stopped */
   NULL, /* get_tib_address */
   NULL, /* pause_all */
diff --git a/gdbserver/regcache.cc b/gdbserver/regcache.cc
index f63463344af..ec9d70d42fb 100644
--- a/gdbserver/regcache.cc
+++ b/gdbserver/regcache.cc
@@ -477,25 +477,13 @@  collect_register_by_name (struct regcache *regcache,
 CORE_ADDR
 regcache_read_pc (struct regcache *regcache)
 {
-  CORE_ADDR pc_val;
-
-  if (the_target->read_pc)
-    pc_val = the_target->read_pc (regcache);
-  else
-    internal_error (__FILE__, __LINE__,
-		    "regcache_read_pc: Unable to find PC");
-
-  return pc_val;
+  return the_target->pt->read_pc (regcache);
 }
 
 void
 regcache_write_pc (struct regcache *regcache, CORE_ADDR pc)
 {
-  if (the_target->write_pc)
-    the_target->write_pc (regcache, pc);
-  else
-    internal_error (__FILE__, __LINE__,
-		    "regcache_write_pc: Unable to update PC");
+  the_target->pt->write_pc (regcache, pc);
 }
 
 #endif
diff --git a/gdbserver/target.cc b/gdbserver/target.cc
index ded8f3fee9d..4f8d91c171f 100644
--- a/gdbserver/target.cc
+++ b/gdbserver/target.cc
@@ -614,3 +614,15 @@  process_target::supports_tracepoints ()
 {
   return false;
 }
+
+CORE_ADDR
+process_target::read_pc (regcache *regcache)
+{
+  gdb_assert_not_reached ("process_target::read_pc: Unable to find PC");
+}
+
+void
+process_target::write_pc (regcache *regcache, CORE_ADDR pc)
+{
+  gdb_assert_not_reached ("process_target::write_pc: Unable to update PC");
+}
diff --git a/gdbserver/target.h b/gdbserver/target.h
index e36f121a9ae..2aef0208c11 100644
--- a/gdbserver/target.h
+++ b/gdbserver/target.h
@@ -70,12 +70,6 @@  class process_target;
    shared code.  */
 struct process_stratum_target
 {
-  /* Read PC from REGCACHE.  */
-  CORE_ADDR (*read_pc) (struct regcache *regcache);
-
-  /* Write PC to REGCACHE.  */
-  void (*write_pc) (struct regcache *regcache, CORE_ADDR pc);
-
   /* Return true if THREAD is known to be stopped now.  */
   int (*thread_stopped) (struct thread_info *thread);
 
@@ -488,6 +482,12 @@  public:
 
   /* Return true if the target supports tracepoints, false otherwise.  */
   virtual bool supports_tracepoints ();
+
+  /* Read PC from REGCACHE.  */
+  virtual CORE_ADDR read_pc (regcache *regcache);
+
+  /* Write PC to REGCACHE.  */
+  virtual void write_pc (regcache *regcache, CORE_ADDR pc);
 };
 
 extern process_stratum_target *the_target;
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc
index 87a59648c30..a7329fe20cf 100644
--- a/gdbserver/win32-low.cc
+++ b/gdbserver/win32-low.cc
@@ -1852,8 +1852,6 @@  win32_sw_breakpoint_from_kind (int kind, int *size)
 static win32_process_target the_win32_target;
 
 static process_stratum_target win32_target_ops = {
-  NULL, /* read_pc */
-  NULL, /* write_pc */
   NULL, /* thread_stopped */
   win32_get_tib_address,
   NULL, /* pause_all */