[PATCH v3 11/13] TILEGX Linux: Fill 'collect_regset' in regset structure.

Andreas Arnez <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
gdb/
	* tilegx-linux-tdep.c (tilegx_linux_supply_regset): Delete
	function.  Move logic to...
	(tilegx_linux_regmap): ... this new register map.
	(tilegx_linux_regset): Refer to register map, replace supply
	method by regcache_supply_regset, and add collect method.
	* tilegx-tdep.h (enum tilegx_regnum): New enum value
	TILEGX_FIRST_EASY_REGNUM.
---
 gdb/tilegx-linux-tdep.c | 34 +++++++++++-----------------------
 gdb/tilegx-tdep.h       |  1 +
 2 files changed, 12 insertions(+), 23 deletions(-)

diff --git a/gdb/tilegx-linux-tdep.c b/gdb/tilegx-linux-tdep.c
index 98b03db..184d00c 100644
--- a/gdb/tilegx-linux-tdep.c
+++ b/gdb/tilegx-linux-tdep.c
@@ -73,34 +73,22 @@ static const struct tramp_frame tilegx_linux_rt_sigframe =
   tilegx_linux_sigframe_init
 };
 
-/* Supply raw registers from REGCACHE to REGS.  */
+/* Register map; must match struct pt_regs in "ptrace.h".  */
 
-static void
-tilegx_linux_supply_regset (const struct regset *regset,
-			    struct regcache *regcache,
-			    int regnum, const void *regs, size_t len)
-{
-  struct gdbarch *arch = get_regcache_arch (regcache);
-  const char *ptr = regs;
-  int i;
-
-  /* This logic must match that of struct pt_regs in "ptrace.h".  */
-  for (i = 0; i < TILEGX_NUM_EASY_REGS + 2; i++, ptr += tilegx_reg_size)
-    {
-      int gri = (i < TILEGX_NUM_EASY_REGS)
-                 ? i : (i == TILEGX_NUM_EASY_REGS)
-                        ? TILEGX_PC_REGNUM : TILEGX_FAULTNUM_REGNUM;
-
-      if (regnum == gri || regnum == -1)
-	regcache_raw_supply (regcache, gri, ptr);
-    }
-}
+static const struct regcache_map_entry tilegx_linux_regmap[] =
+  {
+    { TILEGX_NUM_EASY_REGS, TILEGX_FIRST_EASY_REGNUM, 8 },
+    { 1, TILEGX_PC_REGNUM, 8 },
+    { 1, TILEGX_FAULTNUM_REGNUM, 8 },
+    { 0 }
+  };
 
 /* TILE-Gx Linux kernel register set.  */
+
 static const struct regset tilegx_linux_regset =
 {
-  NULL,
-  tilegx_linux_supply_regset
+  tilegx_linux_regmap,
+  regcache_supply_regset, regcache_collect_regset
 };
 
 static const struct regset *
diff --git a/gdb/tilegx-tdep.h b/gdb/tilegx-tdep.h
index e24655c..864c798 100644
--- a/gdb/tilegx-tdep.h
+++ b/gdb/tilegx-tdep.h
@@ -31,6 +31,7 @@
 enum tilegx_regnum
   {
     TILEGX_R0_REGNUM,
+    TILEGX_FIRST_EASY_REGNUM = TILEGX_R0_REGNUM,
     TILEGX_R1_REGNUM,
     TILEGX_R2_REGNUM,
     TILEGX_R3_REGNUM,
-- 
1.8.4.2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.