summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorraj <raj@FreeBSD.org>2008-03-03 22:00:46 +0000
committerraj <raj@FreeBSD.org>2008-03-03 22:00:46 +0000
commit7da8e5ed4f261fc463861bc5bce6d53f73b24ee7 (patch)
treedd6a7e682269cddc63866c7f815fd2935c2e1e80 /sys
parente03fbae38985b8df6df8cb851d82fcafd8f715a6 (diff)
downloadFreeBSD-src-7da8e5ed4f261fc463861bc5bce6d53f73b24ee7.zip
FreeBSD-src-7da8e5ed4f261fc463861bc5bce6d53f73b24ee7.tar.gz
Import the omitted gdb_machdep.c for PowerPC kernel.
Approved by: cognet (mentor) MFp4: e500
Diffstat (limited to 'sys')
-rw-r--r--sys/powerpc/powerpc/gdb_machdep.c59
1 files changed, 57 insertions, 2 deletions
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 <machine/gdb_machdep.h>
#include <machine/pcb.h>
#include <machine/reg.h>
+
+#include <machine/hid.h>
+#include <machine/spr.h>
+
#include <machine/trap.h>
#include <gdb/gdb.h>
@@ -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);
}
OpenPOWER on IntegriCloud