Make remote GDB work for AIM processors. For BookE, the kernel
will have a special section, named .PPC.EMB.apuinfo, which will tell GDB that a BookE processor is targeted and which will result in GDB using a different register definition. In order to support remote GDB for BookE, we need the GDB stub in the kernel look for that section and use the BookE definitions.
This commit is contained in:
parent
29cc138cdf
commit
294800e52d
@ -29,20 +29,32 @@
|
||||
#ifndef _MACHINE_GDB_MACHDEP_H_
|
||||
#define _MACHINE_GDB_MACHDEP_H_
|
||||
|
||||
#define GDB_NREGS 153
|
||||
#define PPC_GDB_NREGS4 (32 + 7 + 2)
|
||||
#define PPC_GDB_NREGS8 32
|
||||
#define PPC_GDB_NREGS16 32
|
||||
|
||||
#define GDB_NREGS (PPC_GDB_NREGS4 + PPC_GDB_NREGS8 + PPC_GDB_NREGS16)
|
||||
#define GDB_REG_PC 64
|
||||
|
||||
#define GDB_BUFSZ (GDB_NREGS*4)
|
||||
#define GDB_BUFSZ (PPC_GDB_NREGS4 * 8 + \
|
||||
PPC_GDB_NREGS8 * 16 + \
|
||||
PPC_GDB_NREGS16 * 32)
|
||||
|
||||
static __inline size_t
|
||||
gdb_cpu_regsz(int regnum)
|
||||
{
|
||||
return (sizeof(int));
|
||||
|
||||
if (regnum >= 32 && regnum <= 63)
|
||||
return (8);
|
||||
if (regnum >= 71 && regnum <= 102)
|
||||
return (16);
|
||||
return (4);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
gdb_cpu_query(void)
|
||||
{
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -53,48 +53,20 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
|
||||
*regsz = gdb_cpu_regsz(regnum);
|
||||
|
||||
if (kdb_thread == curthread) {
|
||||
switch (regnum) {
|
||||
case 0: return (&kdb_frame->fixreg[0]);
|
||||
case 2: return (&kdb_frame->fixreg[2]);
|
||||
case 3: return (&kdb_frame->fixreg[3]);
|
||||
case 4: return (&kdb_frame->fixreg[4]);
|
||||
case 5: return (&kdb_frame->fixreg[5]);
|
||||
case 6: return (&kdb_frame->fixreg[6]);
|
||||
case 7: return (&kdb_frame->fixreg[7]);
|
||||
case 8: return (&kdb_frame->fixreg[8]);
|
||||
case 9: return (&kdb_frame->fixreg[9]);
|
||||
case 10: return (&kdb_frame->fixreg[10]);
|
||||
case 11: return (&kdb_frame->fixreg[11]);
|
||||
case 12: return (&kdb_frame->fixreg[12]);
|
||||
case 13: return (&kdb_frame->fixreg[13]);
|
||||
case 64: return (&kdb_frame->srr0);
|
||||
case 67: return (&kdb_frame->lr);
|
||||
|
||||
}
|
||||
if (regnum == 0 || (regnum >= 2 && regnum <= 31))
|
||||
return (kdb_frame->fixreg + regnum);
|
||||
if (regnum == 64)
|
||||
return (&kdb_frame->srr0);
|
||||
if (regnum == 67)
|
||||
return (&kdb_frame->lr);
|
||||
}
|
||||
|
||||
switch (regnum) {
|
||||
case 1: return (&kdb_thrctx->pcb_sp);
|
||||
case 14: return (&kdb_thrctx->pcb_context[0]);
|
||||
case 15: return (&kdb_thrctx->pcb_context[1]);
|
||||
case 16: return (&kdb_thrctx->pcb_context[2]);
|
||||
case 17: return (&kdb_thrctx->pcb_context[3]);
|
||||
case 18: return (&kdb_thrctx->pcb_context[4]);
|
||||
case 19: return (&kdb_thrctx->pcb_context[5]);
|
||||
case 20: return (&kdb_thrctx->pcb_context[6]);
|
||||
case 21: return (&kdb_thrctx->pcb_context[7]);
|
||||
case 22: return (&kdb_thrctx->pcb_context[8]);
|
||||
case 23: return (&kdb_thrctx->pcb_context[9]);
|
||||
case 24: return (&kdb_thrctx->pcb_context[10]);
|
||||
case 25: return (&kdb_thrctx->pcb_context[11]);
|
||||
case 26: return (&kdb_thrctx->pcb_context[12]);
|
||||
case 27: return (&kdb_thrctx->pcb_context[13]);
|
||||
case 28: return (&kdb_thrctx->pcb_context[14]);
|
||||
case 29: return (&kdb_thrctx->pcb_context[15]);
|
||||
case 30: return (&kdb_thrctx->pcb_context[16]);
|
||||
case 31: return (&kdb_thrctx->pcb_context[17]);
|
||||
case 64: return (&kdb_thrctx->pcb_lr);
|
||||
}
|
||||
if (regnum == 1)
|
||||
return (&kdb_thrctx->pcb_sp);
|
||||
if (regnum >= 14 && regnum <= 31)
|
||||
return (kdb_thrctx->pcb_context + (regnum - 14));
|
||||
if (regnum == 64)
|
||||
return (&kdb_thrctx->pcb_lr);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user