void supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp) { if (mips_isa_regsize (get_regcache_arch (regcache)) == 4) mips_supply_gregset (regcache, (const mips_elf_gregset_t *) gregsetp); else mips64_supply_gregset (regcache, (const mips64_elf_gregset_t *) gregsetp); }
static void mips64_linux_regsets_fetch_registers (struct regcache *regcache, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int is_fp; int tid; if (regno >= mips_regnum (gdbarch)->fp0 && regno <= mips_regnum (gdbarch)->fp0 + 32) is_fp = 1; else if (regno == mips_regnum (gdbarch)->fp_control_status) is_fp = 1; else if (regno == mips_regnum (gdbarch)->fp_implementation_revision) is_fp = 1; else is_fp = 0; tid = ptid_get_lwp (inferior_ptid); if (tid == 0) tid = ptid_get_pid (inferior_ptid); if (regno == -1 || !is_fp) { mips64_elf_gregset_t regs; if (ptrace (PTRACE_GETREGS, tid, 0L, (PTRACE_TYPE_ARG3) ®s) == -1) { if (errno == EIO) { have_ptrace_regsets = 0; return; } perror_with_name (_("Couldn't get registers")); } mips64_supply_gregset (regcache, (const mips64_elf_gregset_t *) ®s); } if (regno == -1 || is_fp) { mips64_elf_fpregset_t fp_regs; if (ptrace (PTRACE_GETFPREGS, tid, 0L, (PTRACE_TYPE_ARG3) &fp_regs) == -1) { if (errno == EIO) { have_ptrace_regsets = 0; return; } perror_with_name (_("Couldn't get FP registers")); } mips64_supply_fpregset (regcache, (const mips64_elf_fpregset_t *) &fp_regs); } }
static void mips64_supply_gregset_wrapper (const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len) { gdb_assert (len == sizeof (mips64_elf_gregset_t)); mips64_supply_gregset (regcache, (const mips64_elf_gregset_t *)gregs); }
static void fetch_core_registers (struct regcache *regcache, char *core_reg_sect, unsigned core_reg_size, int which, CORE_ADDR reg_addr) { mips_elf_gregset_t gregset; mips_elf_fpregset_t fpregset; mips64_elf_gregset_t gregset64; mips64_elf_fpregset_t fpregset64; if (which == 0) { if (core_reg_size == sizeof (gregset)) { memcpy ((char *) &gregset, core_reg_sect, sizeof (gregset)); mips_supply_gregset (regcache, (const mips_elf_gregset_t *) &gregset); } else if (core_reg_size == sizeof (gregset64)) { memcpy ((char *) &gregset64, core_reg_sect, sizeof (gregset64)); mips64_supply_gregset (regcache, (const mips64_elf_gregset_t *) &gregset64); } else { warning (_("wrong size gregset struct in core file")); } } else if (which == 2) { if (core_reg_size == sizeof (fpregset)) { memcpy ((char *) &fpregset, core_reg_sect, sizeof (fpregset)); mips_supply_fpregset (regcache, (const mips_elf_fpregset_t *) &fpregset); } else if (core_reg_size == sizeof (fpregset64)) { memcpy ((char *) &fpregset64, core_reg_sect, sizeof (fpregset64)); mips64_supply_fpregset (regcache, (const mips64_elf_fpregset_t *) &fpregset64); } else { warning (_("wrong size fpregset struct in core file")); } } }