#include "defs.h"
#include "inferior.h"
#include "regcache.h"
#include "target.h"
#include <sys/types.h>
#include <sys/ptrace.h>
#include <machine/reg.h>
#include "m88k-tdep.h"
#include "inf-ptrace.h"
static void
m88kbsd_supply_gregset (struct regcache *regcache, const void *gregs)
{
const char *regs = gregs;
int regnum;
for (regnum = 0; regnum < M88K_NUM_REGS; regnum++)
regcache_raw_supply (regcache, regnum, regs + regnum * 4);
}
static void
m88kbsd_collect_gregset (const struct regcache *regcache,
void *gregs, int regnum)
{
char *regs = gregs;
int i;
for (i = 0; i < M88K_NUM_REGS; i++)
{
if (regnum == -1 || regnum == i)
regcache_raw_collect (regcache, i, regs + i * 4);
}
}
static void
m88kbsd_fetch_inferior_registers (int regnum)
{
struct reg regs;
if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't get registers"));
m88kbsd_supply_gregset (current_regcache, ®s);
}
static void
m88kbsd_store_inferior_registers (int regnum)
{
struct reg regs;
if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't get registers"));
m88kbsd_collect_gregset (current_regcache, ®s, regnum);
if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
(PTRACE_TYPE_ARG3) ®s, 0) == -1)
perror_with_name (_("Couldn't write registers"));
}
void _initialize_m88kbsd_nat (void);
void
_initialize_m88kbsd_nat (void)
{
struct target_ops *t;
t = inf_ptrace_target ();
t->to_fetch_registers = m88kbsd_fetch_inferior_registers;
t->to_store_registers = m88kbsd_store_inferior_registers;
add_target (t);
}