Example #1
0
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 ();
}