From 7da8e5ed4f261fc463861bc5bce6d53f73b24ee7 Mon Sep 17 00:00:00 2001 From: raj Date: Mon, 3 Mar 2008 22:00:46 +0000 Subject: Import the omitted gdb_machdep.c for PowerPC kernel. Approved by: cognet (mentor) MFp4: e500 --- sys/powerpc/powerpc/gdb_machdep.c | 59 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) (limited to 'sys') diff --git a/sys/powerpc/powerpc/gdb_machdep.c b/sys/powerpc/powerpc/gdb_machdep.c index 5fbb744..a29ff5d 100644 --- a/sys/powerpc/powerpc/gdb_machdep.c +++ b/sys/powerpc/powerpc/gdb_machdep.c @@ -37,6 +37,10 @@ __FBSDID("$FreeBSD$"); #include #include #include + +#include +#include + #include #include @@ -47,8 +51,51 @@ 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); + + } + } + 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); } + return (NULL); } @@ -65,8 +112,16 @@ gdb_cpu_setreg(int regnum, void *val) int gdb_cpu_signal(int vector, int dummy __unused) { - +#ifdef E500 + if (vector == EXC_DEBUG || vector == EXC_PGM) + return (SIGTRAP); +#else if (vector == EXC_TRC || vector == EXC_RUNMODETRC) return (SIGTRAP); - return (vector); +#endif + + if (vector <= 255) + return (vector); + else + return (SIGEMT); } -- cgit v1.1