fix startup with core file. make kernel core files work.

This commit is contained in:
cgd 1997-04-16 03:20:08 +00:00
parent 046720d7d4
commit 32cf5aa9cc
1 changed files with 28 additions and 17 deletions

View File

@ -271,25 +271,38 @@ child_resume (pid, step, signal)
perror_with_name ("ptrace");
}
#ifdef KERNEL_DEBUG
#define kread(addr, p, l) \
(target_read_memory((CORE_ADDR)(addr), (char *)(p), (l)))
fetch_kcore_registers (proc, pcb)
struct proc *proc;
struct pcb *pcb;
fetch_kcore_registers (pcbp)
struct pcb *pcbp;
{
struct md_coredump fake_cpustate;
struct trapframe *tf;
int regno;
if (kread(&proc->p_md.md_tf, &tf, sizeof(tf)))
error("cannot read proc at %#x", &proc->p_md.md_tf);
if (kread(tf, &fake_cpustate.md_tf, sizeof(fake_cpustate.md_tf)))
error("cannot read trap frame at %#x", tf);
fake_cpustate.md_fpstate = pcb->pcb_fp;
fetch_core_registers ((char *) &fake_cpustate, sizeof(fake_cpustate), 0, 0);
for (regno = 0; regno < NUM_REGS; regno++)
{
switch (regno)
{
case SP_REGNUM:
supply_register (regno, (char *)&pcbp->pcb_hw.apcb_ksp);
break;
case PC_REGNUM:
supply_register (regno, (char *)&pcbp->pcb_context[7]);
break;
case S0_REGNUM:
case S0_REGNUM+1:
case S0_REGNUM+2:
case S0_REGNUM+3:
case S0_REGNUM+4:
case S0_REGNUM+5:
case S0_REGNUM+6:
supply_register (regno,
(char *)&pcbp->pcb_context[regno - S0_REGNUM]);
break;
default:
supply_register (regno, zerobuf);
break;
}
}
}
void
@ -301,8 +314,6 @@ clear_regs()
supply_register(regno, zerobuf);
}
#endif
static struct core_fns alphanbsd_core_fns =
{
bfd_target_ecoff_flavour,