public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdbserver/linux-low: turn 'siginfo_fixup' into a method
@ 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=cb63de7ca804e4178a48dc500423bcb89726d893

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

    gdbserver/linux-low: turn 'siginfo_fixup' into a method
    
    gdbserver/ChangeLog:
    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.

Diff:
---
 gdbserver/ChangeLog            | 33 +++++++++++++++++++++++++++++++++
 gdbserver/linux-aarch64-low.cc | 15 +++++++++------
 gdbserver/linux-arm-low.cc     |  1 -
 gdbserver/linux-bfin-low.cc    |  1 -
 gdbserver/linux-crisv32-low.cc |  1 -
 gdbserver/linux-low.cc         | 20 +++++++++++---------
 gdbserver/linux-low.h          | 18 ++++++++++++------
 gdbserver/linux-m32r-low.cc    |  1 -
 gdbserver/linux-m68k-low.cc    |  1 -
 gdbserver/linux-mips-low.cc    |  1 -
 gdbserver/linux-ppc-low.cc     |  1 -
 gdbserver/linux-s390-low.cc    |  1 -
 gdbserver/linux-sh-low.cc      |  1 -
 gdbserver/linux-tic6x-low.cc   |  1 -
 gdbserver/linux-tile-low.cc    |  1 -
 gdbserver/linux-x86-low.cc     | 12 +++++++-----
 gdbserver/linux-xtensa-low.cc  |  1 -
 17 files changed, 72 insertions(+), 38 deletions(-)

diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog
index f8a2bd802b3..6ca38f07e52 100644
--- a/gdbserver/ChangeLog
+++ b/gdbserver/ChangeLog
@@ -1,3 +1,36 @@
+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'
diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc
index dfbfa59cba1..79c7db92e76 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 78e93d304f5..267899f99ef 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 5f0d72fed74..6beb61ff3de 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 fe4b68ef4d8..a7f8b480799 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 658ea32f135..755c3e00a9e 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.  */
@@ -6038,6 +6033,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 ()
 {
diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h
index ca6cf3edc1c..599aead0665 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 2dc25f7c668..f42cb2792b0 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 84eccbc14ef..bc0f37b52e5 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 78e243c3d40..b7098a72c6c 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 e0310856c20..573a6d60557 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 f7e439ac612..cd4dc8ab31e 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 08985338db3..070d21fbdd9 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 8f5eff7fdb5..573b4581565 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 72697649fbc..ce487967aad 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 d33833daa6c..bf4e6ec2c8c 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;
 }
 \f
 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 08487145337..b55a6f66740 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 */


^ 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 'siginfo_fixup' into a method 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).