static void m68kbsd_fetch_inferior_registers (struct regcache *regcache, int regnum) { if (regnum == -1 || m68kbsd_gregset_supplies_p (regnum)) { struct reg regs; if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); m68kbsd_supply_gregset (regcache, ®s); } if (regnum == -1 || m68kbsd_fpregset_supplies_p (regnum)) { struct fpreg fpregs; if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get floating point status")); m68kbsd_supply_fpregset (regcache, &fpregs); } }
static void m68kbsd_supply_gregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len) { const gdb_byte *regs = (const gdb_byte *)gregs; int i; gdb_assert (len >= M68KBSD_SIZEOF_GREGS); for (i = M68K_D0_REGNUM; i <= M68K_PC_REGNUM; i++) { if (regnum == i || regnum == -1) regcache_raw_supply (regcache, i, regs + i * 4); } if (len >= M68KBSD_SIZEOF_GREGS + M68KBSD_SIZEOF_FPREGS) { regs += M68KBSD_SIZEOF_GREGS; len -= M68KBSD_SIZEOF_GREGS; m68kbsd_supply_fpregset (regset, regcache, regnum, regs, len); } }
void supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp) { m68kbsd_supply_fpregset (regcache, fpregsetp); }