public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdbserver/linux-low: turn watchpoint ops into methods
@ 2020-04-02 13:18 Tankut Baris Aktemur
  0 siblings, 0 replies; only message in thread
From: Tankut Baris Aktemur @ 2020-04-02 13:18 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ac1bbaca10666fc85572a6deeaa6f1debcd4c129

commit ac1bbaca10666fc85572a6deeaa6f1debcd4c129
Author: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Date:   Thu Apr 2 15:11:27 2020 +0200

    gdbserver/linux-low: turn watchpoint ops into methods
    
    gdbserver/ChangeLog:
    2020-04-02  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
    
            Turn the 'stopped_by_watchpoint' and 'stopped_data_address' linux
            target ops into methods of linux_process_target.
    
            * linux-low.h (struct linux_target_ops): Remove the ops.
            (class linux_process_target) <check_stopped_by_watchpoint>
            <low_stopped_by_watchpoint>
            <low_stopped_data_address>: Declare.
            * linux-low.cc (check_stopped_by_watchpoint): Turn into...
            (linux_process_target::check_stopped_by_watchpoint): ...this.
            (linux_process_target::low_stopped_by_watchpoint): Define.
            (linux_process_target::low_stopped_data_address): Define.
            * linux-x86-low.cc (class x86_target) <low_stopped_by_watchpoint>
            <low_stopped_data_address>: Declare.
            (x86_stopped_by_watchpoint): Turn into...
            (x86_target::low_stopped_by_watchpoint): ...this.
            (x86_stopped_data_address): Turn into...
            (x86_target::low_stopped_data_address): ...this.
            (the_low_target): Remove the op fields.
            * linux-aarch64-low.cc (class aarch64_target)
            <low_stopped_by_watchpoint>
            <low_stopped_data_address>: Declare.
            (aarch64_stopped_by_watchpoint): Turn into...
            (aarch64_target::low_stopped_by_watchpoint): ...this.
            (aarch64_stopped_data_address): Turn into...
            (aarch64_target::low_stopped_data_address): ...this.
            (the_low_target): Remove the op fields.
            * linux-arm-low.cc (class arm_target) <low_stopped_by_watchpoint>
            <low_stopped_data_address>: Declare.
            (arm_stopped_by_watchpoint): Turn into...
            (arm_target::low_stopped_by_watchpoint): ...this.
            (arm_stopped_data_address): Turn into...
            (arm_target::low_stopped_data_address): ...this.
            (the_low_target): Remove the op fields.
            * linux-crisv32-low.cc (class crisv32_target)
            <low_stopped_by_watchpoint>
            <low_stopped_data_address>: Declare.
            (cris_stopped_by_watchpoint): Turn into...
            (crisv32_target::low_stopped_by_watchpoint): ...this.
            (cris_stopped_data_address): Turn into...
            (crisv32_target::low_stopped_data_address): ...this.
            (the_low_target): Remove the op fields.
            * linux-mips-low.cc (class mips_target) <low_stopped_by_watchpoint>
            <low_stopped_data_address>: Declare.
            (mips_stopped_by_watchpoint): Turn into...
            (mips_target::low_stopped_by_watchpoint): ...this.
            (mips_stopped_data_address): Turn into...
            (mips_target::low_stopped_data_address): ...this.
            (the_low_target): Remove the op fields.
            * linux-bfin-low.cc (the_low_target): Remove the op fields.
            * linux-m32r-low.cc (the_low_target): Ditto.
            * linux-m68k-low.cc (the_low_target): Ditto.
            * linux-ppc-low.cc (the_low_target): Ditto.
            * linux-s390-low.cc (the_low_target): Ditto.
            * linux-sh-low.cc (the_low_target): Ditto.
            * linux-sparc-low.cc (the_low_target): Ditto.
            * linux-tic6x-low.cc (the_low_target): Ditto.
            * linux-tile-low.cc (the_low_target): Ditto.
            * linux-xtensa-low.cc (the_low_target): Ditto.

Diff:
---
 gdbserver/ChangeLog            | 61 ++++++++++++++++++++++++++++++++++++++++++
 gdbserver/linux-aarch64-low.cc | 23 ++++++++--------
 gdbserver/linux-arm-low.cc     | 26 +++++++++---------
 gdbserver/linux-bfin-low.cc    |  2 --
 gdbserver/linux-crisv32-low.cc | 14 +++++-----
 gdbserver/linux-low.cc         | 57 +++++++++++++++------------------------
 gdbserver/linux-low.h          | 23 +++++++++++++---
 gdbserver/linux-m32r-low.cc    |  2 --
 gdbserver/linux-m68k-low.cc    |  2 --
 gdbserver/linux-mips-low.cc    | 26 +++++++++---------
 gdbserver/linux-ppc-low.cc     |  2 --
 gdbserver/linux-s390-low.cc    |  2 --
 gdbserver/linux-sh-low.cc      |  2 --
 gdbserver/linux-sparc-low.cc   |  1 -
 gdbserver/linux-tic6x-low.cc   |  2 --
 gdbserver/linux-tile-low.cc    |  2 --
 gdbserver/linux-x86-low.cc     | 14 +++++-----
 gdbserver/linux-xtensa-low.cc  |  2 --
 18 files changed, 157 insertions(+), 106 deletions(-)

diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog
index 45860154721..0b17ea5be26 100644
--- a/gdbserver/ChangeLog
+++ b/gdbserver/ChangeLog
@@ -1,3 +1,64 @@
+2020-04-02  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+	Turn the 'stopped_by_watchpoint' and 'stopped_data_address' linux
+	target ops into methods of linux_process_target.
+
+	* linux-low.h (struct linux_target_ops): Remove the ops.
+	(class linux_process_target) <check_stopped_by_watchpoint>
+	<low_stopped_by_watchpoint>
+	<low_stopped_data_address>: Declare.
+	* linux-low.cc (check_stopped_by_watchpoint): Turn into...
+	(linux_process_target::check_stopped_by_watchpoint): ...this.
+	(linux_process_target::low_stopped_by_watchpoint): Define.
+	(linux_process_target::low_stopped_data_address): Define.
+	* linux-x86-low.cc (class x86_target) <low_stopped_by_watchpoint>
+	<low_stopped_data_address>: Declare.
+	(x86_stopped_by_watchpoint): Turn into...
+	(x86_target::low_stopped_by_watchpoint): ...this.
+	(x86_stopped_data_address): Turn into...
+	(x86_target::low_stopped_data_address): ...this.
+	(the_low_target): Remove the op fields.
+	* linux-aarch64-low.cc (class aarch64_target)
+	<low_stopped_by_watchpoint>
+	<low_stopped_data_address>: Declare.
+	(aarch64_stopped_by_watchpoint): Turn into...
+	(aarch64_target::low_stopped_by_watchpoint): ...this.
+	(aarch64_stopped_data_address): Turn into...
+	(aarch64_target::low_stopped_data_address): ...this.
+	(the_low_target): Remove the op fields.
+	* linux-arm-low.cc (class arm_target) <low_stopped_by_watchpoint>
+	<low_stopped_data_address>: Declare.
+	(arm_stopped_by_watchpoint): Turn into...
+	(arm_target::low_stopped_by_watchpoint): ...this.
+	(arm_stopped_data_address): Turn into...
+	(arm_target::low_stopped_data_address): ...this.
+	(the_low_target): Remove the op fields.
+	* linux-crisv32-low.cc (class crisv32_target)
+	<low_stopped_by_watchpoint>
+	<low_stopped_data_address>: Declare.
+	(cris_stopped_by_watchpoint): Turn into...
+	(crisv32_target::low_stopped_by_watchpoint): ...this.
+	(cris_stopped_data_address): Turn into...
+	(crisv32_target::low_stopped_data_address): ...this.
+	(the_low_target): Remove the op fields.
+	* linux-mips-low.cc (class mips_target) <low_stopped_by_watchpoint>
+	<low_stopped_data_address>: Declare.
+	(mips_stopped_by_watchpoint): Turn into...
+	(mips_target::low_stopped_by_watchpoint): ...this.
+	(mips_stopped_data_address): Turn into...
+	(mips_target::low_stopped_data_address): ...this.
+	(the_low_target): Remove the op fields.
+	* linux-bfin-low.cc (the_low_target): Remove the op fields.
+	* linux-m32r-low.cc (the_low_target): Ditto.
+	* linux-m68k-low.cc (the_low_target): Ditto.
+	* linux-ppc-low.cc (the_low_target): Ditto.
+	* linux-s390-low.cc (the_low_target): Ditto.
+	* linux-sh-low.cc (the_low_target): Ditto.
+	* linux-sparc-low.cc (the_low_target): Ditto.
+	* linux-tic6x-low.cc (the_low_target): Ditto.
+	* linux-tile-low.cc (the_low_target): Ditto.
+	* linux-xtensa-low.cc (the_low_target): Ditto.
+
 2020-04-02  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
 	Turn the 'insert_point' and 'remove_point' linux target ops into
diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc
index 5660ec0fd60..96f8f46d4ee 100644
--- a/gdbserver/linux-aarch64-low.cc
+++ b/gdbserver/linux-aarch64-low.cc
@@ -86,6 +86,10 @@ protected:
 
   int low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
 			int size, raw_breakpoint *bp) override;
+
+  bool low_stopped_by_watchpoint () override;
+
+  CORE_ADDR low_stopped_data_address () override;
 };
 
 /* The singleton target ops object.  */
@@ -409,10 +413,10 @@ aarch64_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
   return ret;
 }
 
-/* Implementation of linux_target_ops method "stopped_data_address".  */
+/* Implementation of linux target ops method "low_stopped_data_address".  */
 
-static CORE_ADDR
-aarch64_stopped_data_address (void)
+CORE_ADDR
+aarch64_target::low_stopped_data_address ()
 {
   siginfo_t siginfo;
   int pid, i;
@@ -471,15 +475,12 @@ aarch64_stopped_data_address (void)
   return (CORE_ADDR) 0;
 }
 
-/* Implementation of linux_target_ops method "stopped_by_watchpoint".  */
+/* Implementation of linux target ops method "low_stopped_by_watchpoint".  */
 
-static int
-aarch64_stopped_by_watchpoint (void)
+bool
+aarch64_target::low_stopped_by_watchpoint ()
 {
-  if (aarch64_stopped_data_address () != 0)
-    return 1;
-  else
-    return 0;
+  return (low_stopped_data_address () != 0);
 }
 
 /* Fetch the thread-local storage pointer for libthread_db.  */
@@ -3112,8 +3113,6 @@ aarch64_supports_hardware_single_step (void)
 
 struct linux_target_ops the_low_target =
 {
-  aarch64_stopped_by_watchpoint,
-  aarch64_stopped_data_address,
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   aarch64_linux_siginfo_fixup,
diff --git a/gdbserver/linux-arm-low.cc b/gdbserver/linux-arm-low.cc
index edb8cd05c1d..2593dfa0eee 100644
--- a/gdbserver/linux-arm-low.cc
+++ b/gdbserver/linux-arm-low.cc
@@ -95,6 +95,10 @@ protected:
 
   int low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
 			int size, raw_breakpoint *bp) override;
+
+  bool low_stopped_by_watchpoint () override;
+
+  CORE_ADDR low_stopped_data_address () override;
 };
 
 /* The singleton target ops object.  */
@@ -672,43 +676,43 @@ arm_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
 }
 
 /* Return whether current thread is stopped due to a watchpoint.  */
-static int
-arm_stopped_by_watchpoint (void)
+bool
+arm_target::low_stopped_by_watchpoint ()
 {
   struct lwp_info *lwp = get_thread_lwp (current_thread);
   siginfo_t siginfo;
 
   /* We must be able to set hardware watchpoints.  */
   if (arm_linux_get_hw_watchpoint_count () == 0)
-    return 0;
+    return false;
 
   /* Retrieve siginfo.  */
   errno = 0;
   ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), 0, &siginfo);
   if (errno != 0)
-    return 0;
+    return false;
 
   /* This must be a hardware breakpoint.  */
   if (siginfo.si_signo != SIGTRAP
       || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
-    return 0;
+    return false;
 
   /* If we are in a positive slot then we're looking at a breakpoint and not
      a watchpoint.  */
   if (siginfo.si_errno >= 0)
-    return 0;
+    return false;
 
   /* Cache stopped data address for use by arm_stopped_data_address.  */
   lwp->arch_private->stopped_data_address
     = (CORE_ADDR) (uintptr_t) siginfo.si_addr;
 
-  return 1;
+  return true;
 }
 
 /* Return data address that triggered watchpoint.  Called only if
-   arm_stopped_by_watchpoint returned true.  */
-static CORE_ADDR
-arm_stopped_data_address (void)
+   low_stopped_by_watchpoint returned true.  */
+CORE_ADDR
+arm_target::low_stopped_data_address ()
 {
   struct lwp_info *lwp = get_thread_lwp (current_thread);
   return lwp->arch_private->stopped_data_address;
@@ -1101,8 +1105,6 @@ arm_target::get_regs_info ()
 }
 
 struct linux_target_ops the_low_target = {
-  arm_stopped_by_watchpoint,
-  arm_stopped_data_address,
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-bfin-low.cc b/gdbserver/linux-bfin-low.cc
index 50c1743a6b4..bc3e312c18f 100644
--- a/gdbserver/linux-bfin-low.cc
+++ b/gdbserver/linux-bfin-low.cc
@@ -171,8 +171,6 @@ bfin_target::get_regs_info ()
 }
 
 struct linux_target_ops the_low_target = {
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-crisv32-low.cc b/gdbserver/linux-crisv32-low.cc
index 4d5edc570e5..fd458350d5a 100644
--- a/gdbserver/linux-crisv32-low.cc
+++ b/gdbserver/linux-crisv32-low.cc
@@ -53,6 +53,10 @@ protected:
 
   int low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
 			int size, raw_breakpoint *bp) override;
+
+  bool low_stopped_by_watchpoint () override;
+
+  CORE_ADDR low_stopped_data_address () override;
 };
 
 /* The singleton target ops object.  */
@@ -355,8 +359,8 @@ crisv32_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
   return 0;
 }
 
-static int
-cris_stopped_by_watchpoint (void)
+bool
+crisv32_target::low_stopped_by_watchpoint ()
 {
   unsigned long exs;
   struct regcache *regcache = get_thread_regcache (current_thread, 1);
@@ -366,8 +370,8 @@ cris_stopped_by_watchpoint (void)
   return (((exs & 0xff00) >> 8) == 0xc);
 }
 
-static CORE_ADDR
-cris_stopped_data_address (void)
+CORE_ADDR
+crisv32_target::low_stopped_data_address ()
 {
   unsigned long eda;
   struct regcache *regcache = get_thread_regcache (current_thread, 1);
@@ -464,8 +468,6 @@ crisv32_target::get_regs_info ()
 }
 
 struct linux_target_ops the_low_target = {
-  cris_stopped_by_watchpoint,
-  cris_stopped_data_address,
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index 814c03705cd..998bd1d0595 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -786,8 +786,6 @@ get_syscall_trapinfo (struct lwp_info *lwp, int *sysno)
   current_thread = saved_thread;
 }
 
-static int check_stopped_by_watchpoint (struct lwp_info *child);
-
 bool
 linux_process_target::save_stop_reason (lwp_info *lwp)
 {
@@ -2245,46 +2243,33 @@ dequeue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
   return 0;
 }
 
-/* Fetch the possibly triggered data watchpoint info and store it in
-   CHILD.
-
-   On some archs, like x86, that use debug registers to set
-   watchpoints, it's possible that the way to know which watched
-   address trapped, is to check the register that is used to select
-   which address to watch.  Problem is, between setting the watchpoint
-   and reading back which data address trapped, the user may change
-   the set of watchpoints, and, as a consequence, GDB changes the
-   debug registers in the inferior.  To avoid reading back a stale
-   stopped-data-address when that happens, we cache in LP the fact
-   that a watchpoint trapped, and the corresponding data address, as
-   soon as we see CHILD stop with a SIGTRAP.  If GDB changes the debug
-   registers meanwhile, we have the cached data we can rely on.  */
-
-static int
-check_stopped_by_watchpoint (struct lwp_info *child)
+bool
+linux_process_target::check_stopped_by_watchpoint (lwp_info *child)
 {
-  if (the_low_target.stopped_by_watchpoint != NULL)
-    {
-      struct thread_info *saved_thread;
+  struct thread_info *saved_thread = current_thread;
+  current_thread = get_lwp_thread (child);
 
-      saved_thread = current_thread;
-      current_thread = get_lwp_thread (child);
+  if (low_stopped_by_watchpoint ())
+    {
+      child->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
+      child->stopped_data_address = low_stopped_data_address ();
+    }
 
-      if (the_low_target.stopped_by_watchpoint ())
-	{
-	  child->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
+  current_thread = saved_thread;
 
-	  if (the_low_target.stopped_data_address != NULL)
-	    child->stopped_data_address
-	      = the_low_target.stopped_data_address ();
-	  else
-	    child->stopped_data_address = 0;
-	}
+  return child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
+}
 
-      current_thread = saved_thread;
-    }
+bool
+linux_process_target::low_stopped_by_watchpoint ()
+{
+  return false;
+}
 
-  return child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
+CORE_ADDR
+linux_process_target::low_stopped_data_address ()
+{
+  return 0;
 }
 
 /* Return the ptrace options that we want to try to enable.  */
diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h
index 0fdd8ceb945..ee2fdb8e865 100644
--- a/gdbserver/linux-low.h
+++ b/gdbserver/linux-low.h
@@ -131,9 +131,6 @@ struct lwp_info;
 
 struct linux_target_ops
 {
-  int (*stopped_by_watchpoint) (void);
-  CORE_ADDR (*stopped_data_address) (void);
-
   /* Hooks to reformat register data for PEEKUSR/POKEUSR (in particular
      for registers smaller than an xfer unit).  */
   void (*collect_ptrace_register) (struct regcache *regcache,
@@ -622,6 +619,22 @@ private:
   /* Install breakpoints for software single stepping.  */
   void install_software_single_step_breakpoints (lwp_info *lwp);
 
+  /* Fetch the possibly triggered data watchpoint info and store it in
+     CHILD.
+
+     On some archs, like x86, that use debug registers to set
+     watchpoints, it's possible that the way to know which watched
+     address trapped, is to check the register that is used to select
+     which address to watch.  Problem is, between setting the watchpoint
+     and reading back which data address trapped, the user may change
+     the set of watchpoints, and, as a consequence, GDB changes the
+     debug registers in the inferior.  To avoid reading back a stale
+     stopped-data-address when that happens, we cache in LP the fact
+     that a watchpoint trapped, and the corresponding data address, as
+     soon as we see CHILD stop with a SIGTRAP.  If GDB changes the debug
+     registers meanwhile, we have the cached data we can rely on.  */
+  bool check_stopped_by_watchpoint (lwp_info *child);
+
 protected:
   /* The architecture-specific "low" methods are listed below.  */
 
@@ -665,6 +678,10 @@ protected:
   virtual int low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
 				int size, raw_breakpoint *bp);
 
+  virtual bool low_stopped_by_watchpoint ();
+
+  virtual CORE_ADDR low_stopped_data_address ();
+
   /* How many bytes the PC should be decremented after a break.  */
   virtual int low_decr_pc_after_break ();
 };
diff --git a/gdbserver/linux-m32r-low.cc b/gdbserver/linux-m32r-low.cc
index bbafe8fa5c2..14bb83797d9 100644
--- a/gdbserver/linux-m32r-low.cc
+++ b/gdbserver/linux-m32r-low.cc
@@ -161,8 +161,6 @@ m32r_target::get_regs_info ()
 }
 
 struct linux_target_ops the_low_target = {
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-m68k-low.cc b/gdbserver/linux-m68k-low.cc
index fd2d601ba08..7cb80bc2af4 100644
--- a/gdbserver/linux-m68k-low.cc
+++ b/gdbserver/linux-m68k-low.cc
@@ -265,8 +265,6 @@ m68k_supports_hardware_single_step (void)
 }
 
 struct linux_target_ops the_low_target = {
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-mips-low.cc b/gdbserver/linux-mips-low.cc
index 5696af6fae2..3c2231bda30 100644
--- a/gdbserver/linux-mips-low.cc
+++ b/gdbserver/linux-mips-low.cc
@@ -60,6 +60,10 @@ protected:
 
   int low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
 			int size, raw_breakpoint *bp) override;
+
+  bool low_stopped_by_watchpoint () override;
+
+  CORE_ADDR low_stopped_data_address () override;
 };
 
 /* The singleton target ops object.  */
@@ -608,12 +612,12 @@ mips_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
   return 0;
 }
 
-/* This is the implementation of linux_target_ops method
-   stopped_by_watchpoint.  The watchhi R and W bits indicate
+/* This is the implementation of linux target ops method
+   low_stopped_by_watchpoint.  The watchhi R and W bits indicate
    the watch register triggered. */
 
-static int
-mips_stopped_by_watchpoint (void)
+bool
+mips_target::low_stopped_by_watchpoint ()
 {
   struct process_info *proc = current_process ();
   struct arch_process_info *priv = proc->priv->arch_private;
@@ -632,16 +636,16 @@ mips_stopped_by_watchpoint (void)
   for (n = 0; n < MAX_DEBUG_REGISTER && n < num_valid; n++)
     if (mips_linux_watch_get_watchhi (&priv->watch_readback, n)
 	& (R_MASK | W_MASK))
-      return 1;
+      return true;
 
-  return 0;
+  return false;
 }
 
-/* This is the implementation of linux_target_ops method
-   stopped_data_address.  */
+/* This is the implementation of linux target ops method
+   low_stopped_data_address.  */
 
-static CORE_ADDR
-mips_stopped_data_address (void)
+CORE_ADDR
+mips_target::low_stopped_data_address ()
 {
   struct process_info *proc = current_process ();
   struct arch_process_info *priv = proc->priv->arch_private;
@@ -976,8 +980,6 @@ mips_target::get_regs_info ()
 }
 
 struct linux_target_ops the_low_target = {
-  mips_stopped_by_watchpoint,
-  mips_stopped_data_address,
   mips_collect_ptrace_register,
   mips_supply_ptrace_register,
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-ppc-low.cc b/gdbserver/linux-ppc-low.cc
index d28551534bf..deb2ef64f12 100644
--- a/gdbserver/linux-ppc-low.cc
+++ b/gdbserver/linux-ppc-low.cc
@@ -3416,8 +3416,6 @@ ppc_get_ipa_tdesc_idx (void)
 }
 
 struct linux_target_ops the_low_target = {
-  NULL,
-  NULL,
   ppc_collect_ptrace_register,
   ppc_supply_ptrace_register,
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-s390-low.cc b/gdbserver/linux-s390-low.cc
index 36471fbea62..9e7db23e5d0 100644
--- a/gdbserver/linux-s390-low.cc
+++ b/gdbserver/linux-s390-low.cc
@@ -2838,8 +2838,6 @@ s390_emit_ops (void)
 }
 
 struct linux_target_ops the_low_target = {
-  NULL,
-  NULL,
   s390_collect_ptrace_register,
   s390_supply_ptrace_register,
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-sh-low.cc b/gdbserver/linux-sh-low.cc
index c4af7defadb..a2215ddb4bc 100644
--- a/gdbserver/linux-sh-low.cc
+++ b/gdbserver/linux-sh-low.cc
@@ -192,8 +192,6 @@ sh_target::low_arch_setup ()
 }
 
 struct linux_target_ops the_low_target = {
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-sparc-low.cc b/gdbserver/linux-sparc-low.cc
index 0380cedb800..8d1b61b0631 100644
--- a/gdbserver/linux-sparc-low.cc
+++ b/gdbserver/linux-sparc-low.cc
@@ -341,7 +341,6 @@ sparc_target::get_regs_info ()
 }
 
 struct linux_target_ops the_low_target = {
-  NULL, NULL,
   NULL, NULL
 };
 
diff --git a/gdbserver/linux-tic6x-low.cc b/gdbserver/linux-tic6x-low.cc
index e6f2203d492..9ff23969c6c 100644
--- a/gdbserver/linux-tic6x-low.cc
+++ b/gdbserver/linux-tic6x-low.cc
@@ -423,8 +423,6 @@ tic6x_target::get_regs_info ()
 }
 
 struct linux_target_ops the_low_target = {
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-tile-low.cc b/gdbserver/linux-tile-low.cc
index f9c5460989e..6efd7b2c8c3 100644
--- a/gdbserver/linux-tile-low.cc
+++ b/gdbserver/linux-tile-low.cc
@@ -224,8 +224,6 @@ tile_supports_hardware_single_step (void)
 
 struct linux_target_ops the_low_target =
 {
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */
diff --git a/gdbserver/linux-x86-low.cc b/gdbserver/linux-x86-low.cc
index e6566a1da94..1c6e9b1d100 100644
--- a/gdbserver/linux-x86-low.cc
+++ b/gdbserver/linux-x86-low.cc
@@ -133,6 +133,10 @@ protected:
 
   int low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
 			int size, raw_breakpoint *bp) override;
+
+  bool low_stopped_by_watchpoint () override;
+
+  CORE_ADDR low_stopped_data_address () override;
 };
 
 /* The singleton target ops object.  */
@@ -661,15 +665,15 @@ x86_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
     }
 }
 
-static int
-x86_stopped_by_watchpoint (void)
+bool
+x86_target::low_stopped_by_watchpoint ()
 {
   struct process_info *proc = current_process ();
   return x86_dr_stopped_by_watchpoint (&proc->priv->arch_private->debug_reg_state);
 }
 
-static CORE_ADDR
-x86_stopped_data_address (void)
+CORE_ADDR
+x86_target::low_stopped_data_address ()
 {
   struct process_info *proc = current_process ();
   CORE_ADDR addr;
@@ -2918,8 +2922,6 @@ x86_get_ipa_tdesc_idx (void)
 
 struct linux_target_ops the_low_target =
 {
-  x86_stopped_by_watchpoint,
-  x86_stopped_data_address,
   /* collect_ptrace_register/supply_ptrace_register are not needed in the
      native i386 case (no registers smaller than an xfer unit), and are not
      used in the biarch case (HAVE_LINUX_USRREGS is not defined).  */
diff --git a/gdbserver/linux-xtensa-low.cc b/gdbserver/linux-xtensa-low.cc
index a7023f465b2..7bc09e99629 100644
--- a/gdbserver/linux-xtensa-low.cc
+++ b/gdbserver/linux-xtensa-low.cc
@@ -329,8 +329,6 @@ xtensa_target::get_regs_info ()
 }
 
 struct linux_target_ops the_low_target = {
-  NULL, /* stopped_by_watchpoint */
-  NULL, /* stopped_data_address */
   NULL, /* collect_ptrace_register */
   NULL, /* supply_ptrace_register */
   NULL, /* siginfo_fixup */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-04-02 13:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-02 13:18 [binutils-gdb] gdbserver/linux-low: turn watchpoint ops into methods Tankut Baris Aktemur

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).