TILEGX Linux: Fill 'collect_regset' in regset structure.
authorAndreas Arnez <arnez@linux.vnet.ibm.com>
Wed, 16 Jul 2014 16:50:49 +0000 (16:50 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Thu, 7 Aug 2014 15:31:50 +0000 (17:31 +0200)
gdb/ChangeLog
gdb/tilegx-linux-tdep.c
gdb/tilegx-tdep.h

index 808887ebcf437973477c49e9ec479b508bcffaa3..48f7d3c628205219b97fc2136817a7fd97144548 100644 (file)
@@ -1,3 +1,13 @@
+2014-08-07  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
+       * 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.
+
 2014-08-07  Andreas Arnez  <arnez@linux.vnet.ibm.com>
 
        * score-tdep.c (score7_linux_supply_gregset): Reduce to small stub
index 98b03dbcd849b0f7d4b8f70171c38cb9277f1412..184d00cf42c173f7bfc95cc0f2d9a777569b8a65 100644 (file)
@@ -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 *
index e24655c15ecaf260b1f926ba0272a87501f97571..864c7988976ab5f13dbb0c445a77aea4001f74a2 100644 (file)
@@ -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,