return PS_OK;
}
-#ifdef HAVE_PTRACE_GETREGS
-
static void
mips_collect_register (struct regcache *regcache,
int use_64bit, int regno, union mips_register *reg)
supply_register (regcache, regno, reg->buf + offset);
}
+#ifdef HAVE_PTRACE_GETREGS
+
static void
mips_collect_register_32bit (struct regcache *regcache,
int use_64bit, int regno, unsigned char *buf)
}
#endif /* HAVE_PTRACE_GETREGS */
+/* Take care of 32-bit registers with 64-bit ptrace, POKEUSER side. */
+
+static void
+mips_collect_ptrace_register (struct regcache *regcache,
+ int regno, char *buf)
+{
+ const struct target_desc *tdesc = current_process ()->tdesc;
+ int use_64bit = sizeof (PTRACE_XFER_TYPE) == 8;
+
+ if (use_64bit && register_size (regcache->tdesc, regno) == 4)
+ {
+ union mips_register reg;
+
+ mips_collect_register (regcache, 0, regno, ®);
+ memcpy (buf, ®, sizeof (reg));
+ }
+ else
+ collect_register (regcache, regno, buf);
+}
+
+/* Take care of 32-bit registers with 64-bit ptrace, PEEKUSER side. */
+
+static void
+mips_supply_ptrace_register (struct regcache *regcache,
+ int regno, const char *buf)
+{
+ const struct target_desc *tdesc = current_process ()->tdesc;
+ int use_64bit = sizeof (PTRACE_XFER_TYPE) == 8;
+
+ if (use_64bit && register_size (regcache->tdesc, regno) == 4)
+ {
+ union mips_register reg;
+
+ memcpy (®, buf, sizeof (reg));
+ mips_supply_register (regcache, 0, regno, ®);
+ }
+ else
+ supply_register (regcache, regno, buf);
+}
+
static struct regset_info mips_regsets[] = {
#ifdef HAVE_PTRACE_GETREGS
{ PTRACE_GETREGS, PTRACE_SETREGS, 0, 38 * 8, GENERAL_REGS,
mips_remove_point,
mips_stopped_by_watchpoint,
mips_stopped_data_address,
- NULL,
- NULL,
+ mips_collect_ptrace_register,
+ mips_supply_ptrace_register,
NULL, /* siginfo_fixup */
mips_linux_new_process,
mips_linux_delete_process,