gdb/mipsnbsd-nat.c - gdb
Functions defined
Source code
- #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 "mips-tdep.h"
- #include "mipsnbsd-tdep.h"
- #include "inf-ptrace.h"
- static int
- getregs_supplies (struct gdbarch *gdbarch, int regno)
- {
- return ((regno) >= MIPS_ZERO_REGNUM
- && (regno) <= gdbarch_pc_regnum (gdbarch));
- }
- static void
- mipsnbsd_fetch_inferior_registers (struct target_ops *ops,
- struct regcache *regcache, int regno)
- {
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
- if (regno == -1 || getregs_supplies (gdbarch, regno))
- {
- struct reg regs;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) ®s, 0) == -1)
- perror_with_name (_("Couldn't get registers"));
- mipsnbsd_supply_reg (regcache, (char *) ®s, regno);
- if (regno != -1)
- return;
- }
- if (regno == -1
- || regno >= gdbarch_fp0_regnum (get_regcache_arch (regcache)))
- {
- struct fpreg fpregs;
- if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
- perror_with_name (_("Couldn't get floating point status"));
- mipsnbsd_supply_fpreg (regcache, (char *) &fpregs, regno);
- }
- }
- static void
- mipsnbsd_store_inferior_registers (struct target_ops *ops,
- struct regcache *regcache, int regno)
- {
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
- if (regno == -1 || getregs_supplies (gdbarch, regno))
- {
- struct reg regs;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) ®s, 0) == -1)
- perror_with_name (_("Couldn't get registers"));
- mipsnbsd_fill_reg (regcache, (char *) ®s, regno);
- if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) ®s, 0) == -1)
- perror_with_name (_("Couldn't write registers"));
- if (regno != -1)
- return;
- }
- if (regno == -1
- || regno >= gdbarch_fp0_regnum (get_regcache_arch (regcache)))
- {
- struct fpreg fpregs;
- if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
- perror_with_name (_("Couldn't get floating point status"));
- mipsnbsd_fill_fpreg (regcache, (char *) &fpregs, regno);
- if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
- perror_with_name (_("Couldn't write floating point status"));
- }
- }
- void _initialize_mipsnbsd_nat (void);
- void
- _initialize_mipsnbsd_nat (void)
- {
- struct target_ops *t;
- t = inf_ptrace_target ();
- t->to_fetch_registers = mipsnbsd_fetch_inferior_registers;
- t->to_store_registers = mipsnbsd_store_inferior_registers;
- add_target (t);
- }