Use PCB/LR from PCB rather from stack on armv7-gdb

The kernel dump does not store these values on the stack.
Use PCB structure to resolve PC and LR properly.

Submitted by:  Wojciech Macek <wma@semihalf.com>
Reviewed by:   jhb, kib
Obtained from: Semihalf
Sponsored by:  Juniper Networks Inc.
Differential Revision: https://reviews.freebsd.org/D4013
This commit is contained in:
Zbigniew Bodek 2015-10-30 12:37:40 +00:00
parent f62dbbae61
commit bf1be54f54
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=290193

View File

@ -63,7 +63,7 @@ kgdb_trgt_fetch_registers(int regno __unused)
#ifndef CROSS_DEBUGGER
struct kthr *kt;
struct pcb pcb;
int i, reg;
int i;
kt = kgdb_thr_lookup_tid(ptid_get_pid(inferior_ptid));
if (kt == NULL)
@ -76,12 +76,8 @@ kgdb_trgt_fetch_registers(int regno __unused)
supply_register(i, (char *)&pcb.pcb_regs.sf_r4 +
(i - (ARM_A1_REGNUM + 4 )) * 4);
}
if (pcb.pcb_regs.sf_sp != 0) {
if (kvm_read(kvm, pcb.pcb_regs.sf_sp + 4 * 4, &reg, 4) != 4)
warnx("kvm_read :%s", kvm_geterr(kvm));
else
supply_register(ARM_PC_REGNUM, (char *)&reg);
}
supply_register(ARM_PC_REGNUM, (char *)&pcb.pcb_regs.sf_pc);
supply_register(ARM_LR_REGNUM, (char *)&pcb.pcb_regs.sf_lr);
#endif
}