summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/amd64/trap.c23
-rw-r--r--sys/i386/i386/trap.c23
-rw-r--r--sys/kern/subr_trap.c23
3 files changed, 51 insertions, 18 deletions
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 8ecc511..a52144e 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
- * $Id: trap.c,v 1.72 1996/02/25 03:02:46 dyson Exp $
+ * $Id: trap.c,v 1.73 1996/03/02 19:37:41 peter Exp $
*/
/*
@@ -691,7 +691,7 @@ static void
trap_fatal(frame)
struct trapframe *frame;
{
- int code, type, eva;
+ int code, type, eva, ss, esp;
struct soft_segment_descriptor softseg;
code = frame->tf_err;
@@ -710,14 +710,25 @@ trap_fatal(frame)
code & PGEX_W ? "write" : "read",
code & PGEX_P ? "protection violation" : "page not present");
}
- printf("instruction pointer = 0x%x:0x%x\n", frame->tf_cs & 0xffff, frame->tf_eip);
+ printf("instruction pointer = 0x%x:0x%x\n",
+ frame->tf_cs & 0xffff, frame->tf_eip);
+ if (ISPL(frame->tf_cs) == SEL_UPL) {
+ ss = frame->tf_ss & 0xffff;
+ esp = frame->tf_esp;
+ } else {
+ ss = GSEL(GDATA_SEL, SEL_KPL);
+ esp = (int)&frame->tf_esp;
+ }
+ printf("stack pointer = 0x%x:0x%x\n", ss, esp);
+ printf("frame pointer = 0x%x:0x%x\n", ss, frame->tf_ebp);
printf("code segment = base 0x%x, limit 0x%x, type 0x%x\n",
- softseg.ssd_base, softseg.ssd_limit, softseg.ssd_type);
+ softseg.ssd_base, softseg.ssd_limit, softseg.ssd_type);
printf(" = DPL %d, pres %d, def32 %d, gran %d\n",
- softseg.ssd_dpl, softseg.ssd_p, softseg.ssd_def32, softseg.ssd_gran);
+ softseg.ssd_dpl, softseg.ssd_p, softseg.ssd_def32,
+ softseg.ssd_gran);
printf("processor eflags = ");
if (frame->tf_eflags & PSL_T)
- printf("trace/trap, ");
+ printf("trace trap, ");
if (frame->tf_eflags & PSL_I)
printf("interrupt enabled, ");
if (frame->tf_eflags & PSL_NT)
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index 8ecc511..a52144e 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
- * $Id: trap.c,v 1.72 1996/02/25 03:02:46 dyson Exp $
+ * $Id: trap.c,v 1.73 1996/03/02 19:37:41 peter Exp $
*/
/*
@@ -691,7 +691,7 @@ static void
trap_fatal(frame)
struct trapframe *frame;
{
- int code, type, eva;
+ int code, type, eva, ss, esp;
struct soft_segment_descriptor softseg;
code = frame->tf_err;
@@ -710,14 +710,25 @@ trap_fatal(frame)
code & PGEX_W ? "write" : "read",
code & PGEX_P ? "protection violation" : "page not present");
}
- printf("instruction pointer = 0x%x:0x%x\n", frame->tf_cs & 0xffff, frame->tf_eip);
+ printf("instruction pointer = 0x%x:0x%x\n",
+ frame->tf_cs & 0xffff, frame->tf_eip);
+ if (ISPL(frame->tf_cs) == SEL_UPL) {
+ ss = frame->tf_ss & 0xffff;
+ esp = frame->tf_esp;
+ } else {
+ ss = GSEL(GDATA_SEL, SEL_KPL);
+ esp = (int)&frame->tf_esp;
+ }
+ printf("stack pointer = 0x%x:0x%x\n", ss, esp);
+ printf("frame pointer = 0x%x:0x%x\n", ss, frame->tf_ebp);
printf("code segment = base 0x%x, limit 0x%x, type 0x%x\n",
- softseg.ssd_base, softseg.ssd_limit, softseg.ssd_type);
+ softseg.ssd_base, softseg.ssd_limit, softseg.ssd_type);
printf(" = DPL %d, pres %d, def32 %d, gran %d\n",
- softseg.ssd_dpl, softseg.ssd_p, softseg.ssd_def32, softseg.ssd_gran);
+ softseg.ssd_dpl, softseg.ssd_p, softseg.ssd_def32,
+ softseg.ssd_gran);
printf("processor eflags = ");
if (frame->tf_eflags & PSL_T)
- printf("trace/trap, ");
+ printf("trace trap, ");
if (frame->tf_eflags & PSL_I)
printf("interrupt enabled, ");
if (frame->tf_eflags & PSL_NT)
diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c
index 8ecc511..a52144e 100644
--- a/sys/kern/subr_trap.c
+++ b/sys/kern/subr_trap.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
- * $Id: trap.c,v 1.72 1996/02/25 03:02:46 dyson Exp $
+ * $Id: trap.c,v 1.73 1996/03/02 19:37:41 peter Exp $
*/
/*
@@ -691,7 +691,7 @@ static void
trap_fatal(frame)
struct trapframe *frame;
{
- int code, type, eva;
+ int code, type, eva, ss, esp;
struct soft_segment_descriptor softseg;
code = frame->tf_err;
@@ -710,14 +710,25 @@ trap_fatal(frame)
code & PGEX_W ? "write" : "read",
code & PGEX_P ? "protection violation" : "page not present");
}
- printf("instruction pointer = 0x%x:0x%x\n", frame->tf_cs & 0xffff, frame->tf_eip);
+ printf("instruction pointer = 0x%x:0x%x\n",
+ frame->tf_cs & 0xffff, frame->tf_eip);
+ if (ISPL(frame->tf_cs) == SEL_UPL) {
+ ss = frame->tf_ss & 0xffff;
+ esp = frame->tf_esp;
+ } else {
+ ss = GSEL(GDATA_SEL, SEL_KPL);
+ esp = (int)&frame->tf_esp;
+ }
+ printf("stack pointer = 0x%x:0x%x\n", ss, esp);
+ printf("frame pointer = 0x%x:0x%x\n", ss, frame->tf_ebp);
printf("code segment = base 0x%x, limit 0x%x, type 0x%x\n",
- softseg.ssd_base, softseg.ssd_limit, softseg.ssd_type);
+ softseg.ssd_base, softseg.ssd_limit, softseg.ssd_type);
printf(" = DPL %d, pres %d, def32 %d, gran %d\n",
- softseg.ssd_dpl, softseg.ssd_p, softseg.ssd_def32, softseg.ssd_gran);
+ softseg.ssd_dpl, softseg.ssd_p, softseg.ssd_def32,
+ softseg.ssd_gran);
printf("processor eflags = ");
if (frame->tf_eflags & PSL_T)
- printf("trace/trap, ");
+ printf("trace trap, ");
if (frame->tf_eflags & PSL_I)
printf("interrupt enabled, ");
if (frame->tf_eflags & PSL_NT)
OpenPOWER on IntegriCloud