- Always print the trap number so that we have something to start with for
mystery traps. If we don't have a message for a given trap, just use UNKNOWN for the message. - Add trap messages for T_XMMFLT and T_RESERVED. MFC after: 1 week
This commit is contained in:
parent
f6232df7a4
commit
7d0a7ec90c
@ -100,7 +100,7 @@ static int trap_pfault(struct trapframe *, int);
|
|||||||
static void trap_fatal(struct trapframe *, vm_offset_t);
|
static void trap_fatal(struct trapframe *, vm_offset_t);
|
||||||
void dblfault_handler(void);
|
void dblfault_handler(void);
|
||||||
|
|
||||||
#define MAX_TRAP_MSG 28
|
#define MAX_TRAP_MSG 30
|
||||||
static char *trap_msg[] = {
|
static char *trap_msg[] = {
|
||||||
"", /* 0 unused */
|
"", /* 0 unused */
|
||||||
"privileged instruction fault", /* 1 T_PRIVINFLT */
|
"privileged instruction fault", /* 1 T_PRIVINFLT */
|
||||||
@ -131,6 +131,8 @@ static char *trap_msg[] = {
|
|||||||
"segment not present fault", /* 26 T_SEGNPFLT */
|
"segment not present fault", /* 26 T_SEGNPFLT */
|
||||||
"stack fault", /* 27 T_STKFLT */
|
"stack fault", /* 27 T_STKFLT */
|
||||||
"machine check trap", /* 28 T_MCHK */
|
"machine check trap", /* 28 T_MCHK */
|
||||||
|
"SIMD floating-point exception", /* 29 T_XMMFLT */
|
||||||
|
"reserved (unknown) fault", /* 30 T_RESERVED */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef KDB
|
#ifdef KDB
|
||||||
@ -609,14 +611,17 @@ trap_fatal(frame, eva)
|
|||||||
int code, type, ss;
|
int code, type, ss;
|
||||||
long esp;
|
long esp;
|
||||||
struct soft_segment_descriptor softseg;
|
struct soft_segment_descriptor softseg;
|
||||||
|
char *msg;
|
||||||
|
|
||||||
code = frame->tf_err;
|
code = frame->tf_err;
|
||||||
type = frame->tf_trapno;
|
type = frame->tf_trapno;
|
||||||
sdtossd(&gdt[IDXSEL(frame->tf_cs & 0xffff)], &softseg);
|
sdtossd(&gdt[IDXSEL(frame->tf_cs & 0xffff)], &softseg);
|
||||||
|
|
||||||
if (type <= MAX_TRAP_MSG)
|
if (type <= MAX_TRAP_MSG)
|
||||||
printf("\n\nFatal trap %d: %s while in %s mode\n",
|
msg = trap_msg[type];
|
||||||
type, trap_msg[type],
|
else
|
||||||
|
msg = "UNKNOWN";
|
||||||
|
printf("\n\nFatal trap %d: %s while in %s mode\n", type, msg,
|
||||||
ISPL(frame->tf_cs) == SEL_UPL ? "user" : "kernel");
|
ISPL(frame->tf_cs) == SEL_UPL ? "user" : "kernel");
|
||||||
#ifdef SMP
|
#ifdef SMP
|
||||||
/* two separate prints in case of a trap on an unmapped page */
|
/* two separate prints in case of a trap on an unmapped page */
|
||||||
|
@ -110,7 +110,7 @@ void dblfault_handler(void);
|
|||||||
|
|
||||||
extern inthand_t IDTVEC(lcall_syscall);
|
extern inthand_t IDTVEC(lcall_syscall);
|
||||||
|
|
||||||
#define MAX_TRAP_MSG 28
|
#define MAX_TRAP_MSG 30
|
||||||
static char *trap_msg[] = {
|
static char *trap_msg[] = {
|
||||||
"", /* 0 unused */
|
"", /* 0 unused */
|
||||||
"privileged instruction fault", /* 1 T_PRIVINFLT */
|
"privileged instruction fault", /* 1 T_PRIVINFLT */
|
||||||
@ -141,6 +141,8 @@ static char *trap_msg[] = {
|
|||||||
"segment not present fault", /* 26 T_SEGNPFLT */
|
"segment not present fault", /* 26 T_SEGNPFLT */
|
||||||
"stack fault", /* 27 T_STKFLT */
|
"stack fault", /* 27 T_STKFLT */
|
||||||
"machine check trap", /* 28 T_MCHK */
|
"machine check trap", /* 28 T_MCHK */
|
||||||
|
"SIMD floating-point exception", /* 29 T_XMMFLT */
|
||||||
|
"reserved (unknown) fault", /* 30 T_RESERVED */
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
|
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
|
||||||
@ -782,14 +784,17 @@ trap_fatal(frame, eva)
|
|||||||
{
|
{
|
||||||
int code, type, ss, esp;
|
int code, type, ss, esp;
|
||||||
struct soft_segment_descriptor softseg;
|
struct soft_segment_descriptor softseg;
|
||||||
|
char *msg;
|
||||||
|
|
||||||
code = frame->tf_err;
|
code = frame->tf_err;
|
||||||
type = frame->tf_trapno;
|
type = frame->tf_trapno;
|
||||||
sdtossd(&gdt[IDXSEL(frame->tf_cs & 0xffff)].sd, &softseg);
|
sdtossd(&gdt[IDXSEL(frame->tf_cs & 0xffff)].sd, &softseg);
|
||||||
|
|
||||||
if (type <= MAX_TRAP_MSG)
|
if (type <= MAX_TRAP_MSG)
|
||||||
printf("\n\nFatal trap %d: %s while in %s mode\n",
|
msg = trap_msg[type];
|
||||||
type, trap_msg[type],
|
else
|
||||||
|
msg = "UNKNOWN";
|
||||||
|
printf("\n\nFatal trap %d: %s while in %s mode\n", type, msg,
|
||||||
frame->tf_eflags & PSL_VM ? "vm86" :
|
frame->tf_eflags & PSL_VM ? "vm86" :
|
||||||
ISPL(frame->tf_cs) == SEL_UPL ? "user" : "kernel");
|
ISPL(frame->tf_cs) == SEL_UPL ? "user" : "kernel");
|
||||||
#ifdef SMP
|
#ifdef SMP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user