void fetch_inferior_registers (int regno) { unsigned int regaddr; char buf[MAX_REGISTER_SIZE]; int i; char zerobuf[MAX_REGISTER_SIZE]; memset (zerobuf, 0, MAX_REGISTER_SIZE); deprecated_registers_fetched (); for (regno = 1; regno < NUM_REGS; regno++) { regaddr = register_ptrace_addr (regno); for (i = 0; i < DEPRECATED_REGISTER_RAW_SIZE (regno); i += sizeof (int)) { *(int *) &buf[i] = ptrace (PT_READ_U, PIDGET (inferior_ptid), (PTRACE_ARG3_TYPE) regaddr, 0); regaddr += sizeof (int); } supply_register (regno, buf); } supply_register (ZERO_REGNUM, zerobuf); /* Frame ptr reg must appear to be 0; it is faked by stack handling code. */ supply_register (DEPRECATED_FP_REGNUM, zerobuf); }
/* Get registers from a core file. REG_ADDR is unused. */ static void fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which, unsigned int reg_addr) { struct coreregs *core_reg; core_reg = (struct coreregs *) core_reg_sect; /* * We have *all* registers * in the first core section. * Ignore which. */ if (core_reg_size < sizeof (*core_reg)) { fprintf_unfiltered (gdb_stderr, "Couldn't read regs from core file\n"); return; } /* Integer registers */ RF (R0_REGNUM + 0, core_reg->intreg.r_r0); RF (R0_REGNUM + 1, core_reg->intreg.r_r1); RF (R0_REGNUM + 2, core_reg->intreg.r_r2); RF (R0_REGNUM + 3, core_reg->intreg.r_r3); RF (R0_REGNUM + 4, core_reg->intreg.r_r4); RF (R0_REGNUM + 5, core_reg->intreg.r_r5); RF (R0_REGNUM + 6, core_reg->intreg.r_r6); RF (R0_REGNUM + 7, core_reg->intreg.r_r7); RF (SP_REGNUM, core_reg->intreg.r_sp); RF (DEPRECATED_FP_REGNUM, core_reg->intreg.r_fp); RF (PC_REGNUM, core_reg->intreg.r_pc); RF (PS_REGNUM, core_reg->intreg.r_psr); /* Floating point registers */ RF (FPS_REGNUM, core_reg->freg.r_fsr); RF (FP0_REGNUM + 0, core_reg->freg.r_freg[0]); RF (FP0_REGNUM + 2, core_reg->freg.r_freg[2]); RF (FP0_REGNUM + 4, core_reg->freg.r_freg[4]); RF (FP0_REGNUM + 6, core_reg->freg.r_freg[6]); RF (LP0_REGNUM + 1, core_reg->freg.r_freg[1]); RF (LP0_REGNUM + 3, core_reg->freg.r_freg[3]); RF (LP0_REGNUM + 5, core_reg->freg.r_freg[5]); RF (LP0_REGNUM + 7, core_reg->freg.r_freg[7]); deprecated_registers_fetched (); }
/* * Get registers from a kernel crash dump or live kernel. * Called by kcore-nbsd.c:get_kcore_registers(). */ void fetch_kcore_registers (struct pcb *pcb) { struct switchframe sf; struct reg intreg; int dummy; /* Integer registers */ if (target_read_memory ((CORE_ADDR) pcb->pcb_ksp, (char *) &sf, sizeof sf)) error ("Cannot read integer registers."); /* We use the psr at kernel entry */ if (target_read_memory ((CORE_ADDR) pcb->pcb_onstack, (char *) &intreg, sizeof intreg)) error ("Cannot read processor status register."); dummy = 0; RF (R0_REGNUM + 0, dummy); RF (R0_REGNUM + 1, dummy); RF (R0_REGNUM + 2, dummy); RF (R0_REGNUM + 3, sf.sf_r3); RF (R0_REGNUM + 4, sf.sf_r4); RF (R0_REGNUM + 5, sf.sf_r5); RF (R0_REGNUM + 6, sf.sf_r6); RF (R0_REGNUM + 7, sf.sf_r7); dummy = pcb->pcb_kfp + 8; RF (SP_REGNUM, dummy); RF (DEPRECATED_FP_REGNUM, sf.sf_fp); RF (PC_REGNUM, sf.sf_pc); RF (PS_REGNUM, intreg.r_psr); /* Floating point registers */ RF (FPS_REGNUM, pcb->pcb_fsr); RF (FP0_REGNUM + 0, pcb->pcb_freg[0]); RF (FP0_REGNUM + 2, pcb->pcb_freg[2]); RF (FP0_REGNUM + 4, pcb->pcb_freg[4]); RF (FP0_REGNUM + 6, pcb->pcb_freg[6]); RF (LP0_REGNUM + 1, pcb->pcb_freg[1]); RF (LP0_REGNUM + 3, pcb->pcb_freg[3]); RF (LP0_REGNUM + 5, pcb->pcb_freg[5]); RF (LP0_REGNUM + 7, pcb->pcb_freg[7]); deprecated_registers_fetched (); }
void fetch_inferior_registers (int regno) { struct reg inferior_registers; struct fpreg inferior_fpregisters; ptrace (PT_GETREGS, PIDGET (inferior_ptid), (PTRACE_ARG3_TYPE) & inferior_registers, 0); ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), (PTRACE_ARG3_TYPE) & inferior_fpregisters, 0); RF (R0_REGNUM + 0, inferior_registers.r_r0); RF (R0_REGNUM + 1, inferior_registers.r_r1); RF (R0_REGNUM + 2, inferior_registers.r_r2); RF (R0_REGNUM + 3, inferior_registers.r_r3); RF (R0_REGNUM + 4, inferior_registers.r_r4); RF (R0_REGNUM + 5, inferior_registers.r_r5); RF (R0_REGNUM + 6, inferior_registers.r_r6); RF (R0_REGNUM + 7, inferior_registers.r_r7); RF (SP_REGNUM, inferior_registers.r_sp); RF (DEPRECATED_FP_REGNUM, inferior_registers.r_fp); RF (PC_REGNUM, inferior_registers.r_pc); RF (PS_REGNUM, inferior_registers.r_psr); RF (FPS_REGNUM, inferior_fpregisters.r_fsr); RF (FP0_REGNUM + 0, inferior_fpregisters.r_freg[0]); RF (FP0_REGNUM + 2, inferior_fpregisters.r_freg[2]); RF (FP0_REGNUM + 4, inferior_fpregisters.r_freg[4]); RF (FP0_REGNUM + 6, inferior_fpregisters.r_freg[6]); RF (LP0_REGNUM + 1, inferior_fpregisters.r_freg[1]); RF (LP0_REGNUM + 3, inferior_fpregisters.r_freg[3]); RF (LP0_REGNUM + 5, inferior_fpregisters.r_freg[5]); RF (LP0_REGNUM + 7, inferior_fpregisters.r_freg[7]); deprecated_registers_fetched (); }