aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2020-04-02 15:11:27 +0200
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2020-04-02 15:11:27 +0200
commitac1bbaca10666fc85572a6deeaa6f1debcd4c129 (patch)
tree1e69bc95276e49e8fe0cbe442d97287e3fd603ef
parent9db9aa232ac37e4dca92733678748adc1bfc7ef0 (diff)
downloadgdb-ac1bbaca10666fc85572a6deeaa6f1debcd4c129.zip
gdb-ac1bbaca10666fc85572a6deeaa6f1debcd4c129.tar.gz
gdb-ac1bbaca10666fc85572a6deeaa6f1debcd4c129.tar.bz2
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.
-rw-r--r--gdbserver/ChangeLog61
-rw-r--r--gdbserver/linux-aarch64-low.cc23
-rw-r--r--gdbserver/linux-arm-low.cc26
-rw-r--r--gdbserver/linux-bfin-low.cc2
-rw-r--r--gdbserver/linux-crisv32-low.cc14
-rw-r--r--gdbserver/linux-low.cc57
-rw-r--r--gdbserver/linux-low.h23
-rw-r--r--gdbserver/linux-m32r-low.cc2
-rw-r--r--gdbserver/linux-m68k-low.cc2
-rw-r--r--gdbserver/linux-mips-low.cc26
-rw-r--r--gdbserver/linux-ppc-low.cc2
-rw-r--r--gdbserver/linux-s390-low.cc2
-rw-r--r--gdbserver/linux-sh-low.cc2
-rw-r--r--gdbserver/linux-sparc-low.cc1
-rw-r--r--gdbserver/linux-tic6x-low.cc2
-rw-r--r--gdbserver/linux-tile-low.cc2
-rw-r--r--gdbserver/linux-x86-low.cc14
-rw-r--r--gdbserver/linux-xtensa-low.cc2
18 files changed, 157 insertions, 106 deletions
diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog
index 4586015..0b17ea5 100644
--- a/gdbserver/ChangeLog
+++ b/gdbserver/ChangeLog
@@ -1,5 +1,66 @@
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
methods of linux_process_target.
diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc
index 5660ec0..96f8f46d 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 edb8cd0..2593dfa 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 50c1743..bc3e312 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 4d5edc5..fd45835 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 814c037..998bd1d 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 0fdd8ce..ee2fdb8 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 bbafe8f..14bb837 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 fd2d601..7cb80bc 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 5696af6..3c2231b 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 d285515..deb2ef6 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 36471fb..9e7db23 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 c4af7de..a2215dd 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 0380ced..8d1b61b 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 e6f2203..9ff2396 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 f9c5460..6efd7b2 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 e6566a1..1c6e9b1 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 a7023f4..7bc09e9 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 */