+\f
+/*
+ * Registers saved in a coredump:
+ * gr0..gr31
+ * sr0..sr7
+ * iaoq0..iaoq1
+ * iasq0..iasq1
+ * sar, iir, isr, ior, ipsw
+ * cr0, cr24..cr31
+ * cr8,9,12,13
+ * cr10, cr15
+ */
+
+static const struct regcache_map_entry hppa_linux_gregmap[] =
+ {
+ { 32, HPPA_R0_REGNUM },
+ { 1, HPPA_SR4_REGNUM+1 },
+ { 1, HPPA_SR4_REGNUM+2 },
+ { 1, HPPA_SR4_REGNUM+3 },
+ { 1, HPPA_SR4_REGNUM+4 },
+ { 1, HPPA_SR4_REGNUM },
+ { 1, HPPA_SR4_REGNUM+5 },
+ { 1, HPPA_SR4_REGNUM+6 },
+ { 1, HPPA_SR4_REGNUM+7 },
+ { 1, HPPA_PCOQ_HEAD_REGNUM },
+ { 1, HPPA_PCOQ_TAIL_REGNUM },
+ { 1, HPPA_PCSQ_HEAD_REGNUM },
+ { 1, HPPA_PCSQ_TAIL_REGNUM },
+ { 1, HPPA_SAR_REGNUM },
+ { 1, HPPA_IIR_REGNUM },
+ { 1, HPPA_ISR_REGNUM },
+ { 1, HPPA_IOR_REGNUM },
+ { 1, HPPA_IPSW_REGNUM },
+ { 1, HPPA_RCR_REGNUM },
+ { 8, HPPA_TR0_REGNUM },
+ { 4, HPPA_PID0_REGNUM },
+ { 1, HPPA_CCR_REGNUM },
+ { 1, HPPA_EIEM_REGNUM },
+ { 0 }
+ };
+
+static const struct regcache_map_entry hppa_linux_fpregmap[] =
+ {
+ /* FIXME: Only works for 32-bit mode. In 64-bit mode there should
+ be 32 fpregs, 8 bytes each. */
+ { 64, HPPA_FP0_REGNUM, 4 },
+ { 0 }
+ };
+
+/* HPPA Linux kernel register set. */
+static const struct regset hppa_linux_regset =
+{
+ hppa_linux_gregmap,
+ regcache_supply_regset, regcache_collect_regset
+};
+
+static const struct regset hppa_linux_fpregset =
+{
+ hppa_linux_fpregmap,
+ regcache_supply_regset, regcache_collect_regset
+};
+
+static void
+hppa_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
+ iterate_over_regset_sections_cb *cb,
+ void *cb_data,
+ const struct regcache *regcache)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+ cb (".reg", 80 * tdep->bytes_per_address, &hppa_linux_regset,
+ NULL, cb_data);
+ cb (".reg2", 64 * 4, &hppa_linux_fpregset, NULL, cb_data);
+}
+\f