This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 16/22] [GDBserver] Multi-process + multi-arch: GNU/Linux Nios 2


This adjusts the GNU/Linux Nios 2 port to new interfaces.

Built with a cross nios2-linux-gnu toolchain.  Otherwise not tested.

gdb/gdbserver/
2012-05-29  Pedro Alves  <palves@redhat.com>

	* linux-nios2-low.c (tdesc_nios2_linux): Declare.
	(nios2_arch_setup): Set the current process'es tdesc.
	(target_regsets): Rename to ...
	(nios2_regsets): ... this.
	(nios2_regsets_info, nios2_usrregs_info, regs_info): New globals.
	(nios2_regs_info): New function.
	(the_low_target): Adjust.
	(initialize_low_arch): New function.
---
 gdb/gdbserver/linux-nios2-low.c |   43 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 38 insertions(+), 5 deletions(-)

diff --git a/gdb/gdbserver/linux-nios2-low.c b/gdb/gdbserver/linux-nios2-low.c
index c41579f..0f1625a 100644
--- a/gdb/gdbserver/linux-nios2-low.c
+++ b/gdb/gdbserver/linux-nios2-low.c
@@ -40,6 +40,7 @@
 /* Defined in auto-generated file nios2-linux.c.  */
 
 void init_registers_nios2_linux (void);
+extern struct target_desc *tdesc_nios2_linux;
 
 /* This union is used to convert between int and byte buffer
    representations of register contents.  */
@@ -68,7 +69,7 @@ static int nios2_regmap[] = {
 static void
 nios2_arch_setup (void)
 {
-  init_registers_nios2_linux ();
+  current_process ()->tdesc = tdesc_nios2_linux;
 }
 
 /* Implement the cannot_fetch_register linux_target_ops method.  */
@@ -206,7 +207,7 @@ nios2_store_gregset (struct regcache *regcache, const void *buf)
 }
 #endif /* HAVE_PTRACE_GETREGS */
 
-struct regset_info target_regsets[] =
+static struct regset_info nios2_regsets[] =
 {
 #ifdef HAVE_PTRACE_GETREGS
   { PTRACE_GETREGS, PTRACE_SETREGS, 0, nios2_num_regs * 4, GENERAL_REGS,
@@ -215,12 +216,36 @@ struct regset_info target_regsets[] =
   { 0, 0, 0, -1, -1, NULL, NULL }
 };
 
+static struct regsets_info nios2_regsets_info =
+  {
+    nios2_regsets, /* regsets */
+    0, /* num_regsets */
+    NULL, /* disabled_regsets */
+  };
+
+static struct usrregs_info nios2_usrregs_info =
+  {
+    nios2_num_regs,
+    nios2_regmap,
+  };
+
+static struct regs_info regs_info =
+  {
+    NULL, /* regset_bitmap */
+    &nios2_usrregs_info,
+    &nios2_regsets_info
+  };
+
+static const struct regs_info *
+nios2_regs_info (void)
+{
+  return &regs_info;
+}
+
 struct linux_target_ops the_low_target =
 {
   nios2_arch_setup,
-  nios2_num_regs,
-  nios2_regmap,
-  NULL,
+  nios2_regs_info,
   nios2_cannot_fetch_register,
   nios2_cannot_store_register,
   NULL,
@@ -232,3 +257,11 @@ struct linux_target_ops the_low_target =
   0,
   nios2_breakpoint_at,
 };
+
+void
+initialize_low_arch (void)
+{
+  init_registers_nios2_linux ();
+
+  initialize_regsets_info (&nios2_regsets_info);
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]