aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Arnez <arnez@linux.vnet.ibm.com>2014-07-16 16:50:49 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2014-08-07 17:31:50 +0200
commit8f1cee41f85e815d300cca3bf82e02a023dea43b (patch)
tree97c7b42cd896747f69b25cf98298b962b8454f19
parentc5741217d390041fc43ca83ad00b07355d40e9ad (diff)
downloadgdb-8f1cee41f85e815d300cca3bf82e02a023dea43b.zip
gdb-8f1cee41f85e815d300cca3bf82e02a023dea43b.tar.gz
gdb-8f1cee41f85e815d300cca3bf82e02a023dea43b.tar.bz2
TILEGX Linux: Fill 'collect_regset' in regset structure.
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/tilegx-linux-tdep.c34
-rw-r--r--gdb/tilegx-tdep.h1
3 files changed, 22 insertions, 23 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 808887e..48f7d3c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
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
that calls regcache_supply_regset and handles the EPC register
separately. Move main logic to...
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,