aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdbserver/ChangeLog33
-rw-r--r--gdbserver/linux-aarch64-low.cc15
-rw-r--r--gdbserver/linux-arm-low.cc1
-rw-r--r--gdbserver/linux-bfin-low.cc1
-rw-r--r--gdbserver/linux-crisv32-low.cc1
-rw-r--r--gdbserver/linux-low.cc20
-rw-r--r--gdbserver/linux-low.h18
-rw-r--r--gdbserver/linux-m32r-low.cc1
-rw-r--r--gdbserver/linux-m68k-low.cc1
-rw-r--r--gdbserver/linux-mips-low.cc1
-rw-r--r--gdbserver/linux-ppc-low.cc1
-rw-r--r--gdbserver/linux-s390-low.cc1
-rw-r--r--gdbserver/linux-sh-low.cc1
-rw-r--r--gdbserver/linux-tic6x-low.cc1
-rw-r--r--gdbserver/linux-tile-low.cc1
-rw-r--r--gdbserver/linux-x86-low.cc12
-rw-r--r--gdbserver/linux-xtensa-low.cc1
17 files changed, 72 insertions, 38 deletions
diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog
index f8a2bd8..6ca38f0 100644
--- a/gdbserver/ChangeLog
+++ b/gdbserver/ChangeLog
@@ -1,5 +1,38 @@
2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+ Turn the 'siginfo_fixup' linux target op into a method of
+ linux_process_target.
+
+ * linux-low.h (struct linux_target_ops): Remove the op.
+ (class linux_process_target) <siginfo_fixup>
+ <low_siginfo_fixup>: Declare.
+ * linux-low.cc (siginfo_fixup): Turn into...
+ (linux_process_target::siginfo_fixup): ...this.
+ (linux_process_target::low_siginfo_fixup): Define.
+ * linux-x86-low.cc (class x86_target) <low_siginfo_fixup>: Declare.
+ (x86_siginfo_fixup): Turn into...
+ (x86_target::low_siginfo_fixup): ...this.
+ (the_low_target): Remove the op field.
+ * linux-aarch64-low.cc (class aarch64_target):
+ <low_siginfo_fixup>: Declare.
+ (aarch64_linux_siginfo_fixup): Turn into...
+ (aarch64_target::low_siginfo_fixup): ...this.
+ (the_low_target): Remove the op field.
+ * linux-arm-low.cc (the_low_target): Remove the op field.
+ * linux-bfin-low.cc (the_low_target): Ditto.
+ * linux-crisv32-low.cc (the_low_target): Ditto.
+ * linux-m32r-low.cc (the_low_target): Ditto.
+ * linux-m68k-low.cc (the_low_target): Ditto.
+ * linux-mips-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-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 'collect_ptrace_register' and 'supply_ptrace_register'
linux target ops into methods of linux_process_target.
diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc
index dfbfa59..79c7db9 100644
--- a/gdbserver/linux-aarch64-low.cc
+++ b/gdbserver/linux-aarch64-low.cc
@@ -90,6 +90,9 @@ protected:
bool low_stopped_by_watchpoint () override;
CORE_ADDR low_stopped_data_address () override;
+
+ bool low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
+ int direction) override;
};
/* The singleton target ops object. */
@@ -493,10 +496,11 @@ ps_get_thread_area (struct ps_prochandle *ph,
is_64bit_tdesc ());
}
-/* Implementation of linux_target_ops method "siginfo_fixup". */
+/* Implementation of linux target ops method "low_siginfo_fixup". */
-static int
-aarch64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
+bool
+aarch64_target::low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
+ int direction)
{
/* Is the inferior 32-bit? If so, then fixup the siginfo object. */
if (!is_64bit_tdesc ())
@@ -508,10 +512,10 @@ aarch64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
aarch64_siginfo_from_compat_siginfo (native,
(struct compat_siginfo *) inf);
- return 1;
+ return true;
}
- return 0;
+ return false;
}
/* Implementation of linux_target_ops method "new_process". */
@@ -3113,7 +3117,6 @@ aarch64_supports_hardware_single_step (void)
struct linux_target_ops the_low_target =
{
- aarch64_linux_siginfo_fixup,
aarch64_linux_new_process,
aarch64_linux_delete_process,
aarch64_linux_new_thread,
diff --git a/gdbserver/linux-arm-low.cc b/gdbserver/linux-arm-low.cc
index 78e93d3..267899f 100644
--- a/gdbserver/linux-arm-low.cc
+++ b/gdbserver/linux-arm-low.cc
@@ -1105,7 +1105,6 @@ arm_target::get_regs_info ()
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
arm_new_process,
arm_delete_process,
arm_new_thread,
diff --git a/gdbserver/linux-bfin-low.cc b/gdbserver/linux-bfin-low.cc
index 5f0d72f..6beb61f 100644
--- a/gdbserver/linux-bfin-low.cc
+++ b/gdbserver/linux-bfin-low.cc
@@ -171,7 +171,6 @@ bfin_target::get_regs_info ()
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-crisv32-low.cc b/gdbserver/linux-crisv32-low.cc
index fe4b68e..a7f8b48 100644
--- a/gdbserver/linux-crisv32-low.cc
+++ b/gdbserver/linux-crisv32-low.cc
@@ -468,7 +468,6 @@ crisv32_target::get_regs_info ()
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index 658ea32..755c3e0 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -6016,16 +6016,11 @@ linux_process_target::qxfer_osdata (const char *annex,
return linux_common_xfer_osdata (annex, readbuf, offset, len);
}
-/* Convert a native/host siginfo object, into/from the siginfo in the
- layout of the inferiors' architecture. */
-
-static void
-siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
+void
+linux_process_target::siginfo_fixup (siginfo_t *siginfo,
+ gdb_byte *inf_siginfo, int direction)
{
- int done = 0;
-
- if (the_low_target.siginfo_fixup != NULL)
- done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
+ bool done = low_siginfo_fixup (siginfo, inf_siginfo, direction);
/* If there was no callback, or the callback didn't do anything,
then just do a straight memcpy. */
@@ -6039,6 +6034,13 @@ siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
}
bool
+linux_process_target::low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
+ int direction)
+{
+ return false;
+}
+
+bool
linux_process_target::supports_qxfer_siginfo ()
{
return true;
diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h
index ca6cf3e..599aead 100644
--- a/gdbserver/linux-low.h
+++ b/gdbserver/linux-low.h
@@ -131,12 +131,6 @@ struct lwp_info;
struct linux_target_ops
{
- /* Hook to convert from target format to ptrace format and back.
- Returns true if any conversion was done; false otherwise.
- If DIRECTION is 1, then copy from INF to NATIVE.
- If DIRECTION is 0, copy from NATIVE to INF. */
- int (*siginfo_fixup) (siginfo_t *native, gdb_byte *inf, int direction);
-
/* Hook to call when a new process is created or attached to.
If extra per-process architecture-specific data is needed,
allocate it here. */
@@ -628,6 +622,11 @@ private:
registers meanwhile, we have the cached data we can rely on. */
bool check_stopped_by_watchpoint (lwp_info *child);
+ /* Convert a native/host siginfo object, into/from the siginfo in the
+ layout of the inferiors' architecture. */
+ void siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo,
+ int direction);
+
protected:
/* The architecture-specific "low" methods are listed below. */
@@ -683,6 +682,13 @@ protected:
virtual void low_supply_ptrace_register (regcache *regcache, int regno,
const char *buf);
+ /* Hook to convert from target format to ptrace format and back.
+ Returns true if any conversion was done; false otherwise.
+ If DIRECTION is 1, then copy from INF to NATIVE.
+ If DIRECTION is 0, copy from NATIVE to INF. */
+ virtual bool low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
+ int direction);
+
/* 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 2dc25f7..f42cb27 100644
--- a/gdbserver/linux-m32r-low.cc
+++ b/gdbserver/linux-m32r-low.cc
@@ -161,7 +161,6 @@ m32r_target::get_regs_info ()
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-m68k-low.cc b/gdbserver/linux-m68k-low.cc
index 84eccbc..bc0f37b 100644
--- a/gdbserver/linux-m68k-low.cc
+++ b/gdbserver/linux-m68k-low.cc
@@ -265,7 +265,6 @@ m68k_supports_hardware_single_step (void)
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-mips-low.cc b/gdbserver/linux-mips-low.cc
index 78e243c..b7098a7 100644
--- a/gdbserver/linux-mips-low.cc
+++ b/gdbserver/linux-mips-low.cc
@@ -986,7 +986,6 @@ mips_target::get_regs_info ()
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
mips_linux_new_process,
mips_linux_delete_process,
mips_linux_new_thread,
diff --git a/gdbserver/linux-ppc-low.cc b/gdbserver/linux-ppc-low.cc
index e031085..573a6d6 100644
--- a/gdbserver/linux-ppc-low.cc
+++ b/gdbserver/linux-ppc-low.cc
@@ -3428,7 +3428,6 @@ ppc_get_ipa_tdesc_idx (void)
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-s390-low.cc b/gdbserver/linux-s390-low.cc
index f7e439a..cd4dc8a 100644
--- a/gdbserver/linux-s390-low.cc
+++ b/gdbserver/linux-s390-low.cc
@@ -2845,7 +2845,6 @@ s390_emit_ops (void)
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-sh-low.cc b/gdbserver/linux-sh-low.cc
index 0898533..070d21f 100644
--- a/gdbserver/linux-sh-low.cc
+++ b/gdbserver/linux-sh-low.cc
@@ -192,7 +192,6 @@ sh_target::low_arch_setup ()
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-tic6x-low.cc b/gdbserver/linux-tic6x-low.cc
index 8f5eff7..573b458 100644
--- a/gdbserver/linux-tic6x-low.cc
+++ b/gdbserver/linux-tic6x-low.cc
@@ -423,7 +423,6 @@ tic6x_target::get_regs_info ()
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-tile-low.cc b/gdbserver/linux-tile-low.cc
index 7269764..ce48796 100644
--- a/gdbserver/linux-tile-low.cc
+++ b/gdbserver/linux-tile-low.cc
@@ -224,7 +224,6 @@ tile_supports_hardware_single_step (void)
struct linux_target_ops the_low_target =
{
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */
diff --git a/gdbserver/linux-x86-low.cc b/gdbserver/linux-x86-low.cc
index d33833d..bf4e6ec 100644
--- a/gdbserver/linux-x86-low.cc
+++ b/gdbserver/linux-x86-low.cc
@@ -141,6 +141,10 @@ protected:
/* 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). */
+
+ /* Need to fix up i386 siginfo if host is amd64. */
+ bool low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
+ int direction) override;
};
/* The singleton target ops object. */
@@ -757,8 +761,8 @@ x86_debug_reg_state (pid_t pid)
from INF to PTRACE. If DIRECTION is 0, copy from PTRACE to
INF. */
-static int
-x86_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
+bool
+x86_target::low_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
{
#ifdef __x86_64__
unsigned int machine;
@@ -775,7 +779,7 @@ x86_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
FIXUP_X32);
#endif
- return 0;
+ return false;
}
static int use_xml;
@@ -2926,8 +2930,6 @@ x86_get_ipa_tdesc_idx (void)
struct linux_target_ops the_low_target =
{
- /* need to fix up i386 siginfo if host is amd64 */
- x86_siginfo_fixup,
x86_linux_new_process,
x86_linux_delete_process,
x86_linux_new_thread,
diff --git a/gdbserver/linux-xtensa-low.cc b/gdbserver/linux-xtensa-low.cc
index 0848714..b55a6f6 100644
--- a/gdbserver/linux-xtensa-low.cc
+++ b/gdbserver/linux-xtensa-low.cc
@@ -329,7 +329,6 @@ xtensa_target::get_regs_info ()
}
struct linux_target_ops the_low_target = {
- NULL, /* siginfo_fixup */
NULL, /* new_process */
NULL, /* delete_process */
NULL, /* new_thread */