gdb/shnbsd-nat.c - gdb
Functions defined
Macros defined
Source code
- #include "defs.h"
- #include "inferior.h"
- #include <sys/types.h>
- #include <sys/ptrace.h>
- #include <machine/reg.h>
- #include "sh-tdep.h"
- #include "inf-ptrace.h"
- #include "regcache.h"
- #define GETREGS_SUPPLIES(gdbarch, regno) \
- (((regno) >= R0_REGNUM && (regno) <= (R0_REGNUM + 15)) \
- || (regno) == gdbarch_pc_regnum (gdbarch) || (regno) == PR_REGNUM \
- || (regno) == MACH_REGNUM || (regno) == MACL_REGNUM \
- || (regno) == SR_REGNUM)
- #define SHNBSD_SIZEOF_GREGS (21 * 4)
- static void
- shnbsd_fetch_inferior_registers (struct target_ops *ops,
- struct regcache *regcache, int regno)
- {
- if (regno == -1 || GETREGS_SUPPLIES (get_regcache_arch (regcache), regno))
- {
- struct reg inferior_registers;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) &inferior_registers, 0) == -1)
- perror_with_name (_("Couldn't get registers"));
- sh_corefile_supply_regset (&sh_corefile_gregset, regcache, regno,
- (char *) &inferior_registers,
- SHNBSD_SIZEOF_GREGS);
- if (regno != -1)
- return;
- }
- }
- static void
- shnbsd_store_inferior_registers (struct target_ops *ops,
- struct regcache *regcache, int regno)
- {
- if (regno == -1 || GETREGS_SUPPLIES (get_regcache_arch (regcache), regno))
- {
- struct reg inferior_registers;
- if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) &inferior_registers, 0) == -1)
- perror_with_name (_("Couldn't get registers"));
- sh_corefile_collect_regset (&sh_corefile_gregset, regcache, regno,
- (char *) &inferior_registers,
- SHNBSD_SIZEOF_GREGS);
- if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) &inferior_registers, 0) == -1)
- perror_with_name (_("Couldn't set registers"));
- if (regno != -1)
- return;
- }
- }
- void _initialize_shnbsd_nat (void);
- void
- _initialize_shnbsd_nat (void)
- {
- struct target_ops *t;
- t = inf_ptrace_target ();
- t->to_fetch_registers = shnbsd_fetch_inferior_registers;
- t->to_store_registers = shnbsd_store_inferior_registers;
- add_target (t);
- }