27,20 → 27,96 |
* |
*/ |
|
|
#include <panic.h> |
#include <print.h> |
#include <arch/types.h> |
#include <arch/asm.h> |
#include <symtab.h> |
#include <debug.h> |
|
#define VECTORS_64_BUNDLE 20 |
#define VECTORS_16_BUNDLE 48 |
#define VECTORS_16_BUNDLE_START 0x5000 |
#define VECTOR_MAX 0x7f00 |
|
#define BUNDLE_SIZE 16 |
|
extern __u64 REG_DUMP; |
|
char *vector_names_64_bundle[VECTORS_64_BUNDLE] = { |
"VHPT Translation vector", |
"Instruction TLB vector", |
"Data TLB vector", |
"Alternate Instruction TLB vector", |
"Alternate Data TLB vector", |
"Data Nested TLB vector", |
"Instruction Key Miss vector", |
"Data Key Miss vector", |
"Dirty-Bit vector", |
"Instruction Access-Bit vector", |
"Data Access-Bit vector" |
"Break Instruction vector", |
"External Interrupt vector" |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved" |
}; |
|
char *vector_names_16_bundle[VECTORS_16_BUNDLE] = { |
"Page Not Present vector", |
"Key Permission vector", |
"Instruction Access rights vector", |
"Data Access Rights vector", |
"General Exception vector", |
"Disabled FP-Register vector", |
"NaT Consumption vector", |
"Speculation vector", |
"Reserved", |
"Debug vector", |
"Unaligned Reference vector", |
"Unsupported Data Reference vector", |
"Floating-point Fault vector", |
"Floating-point Trap vector", |
"Lower-Privilege Transfer Trap vector", |
"Taken Branch Trap vector", |
"Single STep Trap vector", |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved", |
"Reserved", |
"IA-32 Exception vector", |
"IA-32 Intercept vector", |
"IA-32 Interrupt vector", |
"Reserved", |
"Reserved", |
"Reserved" |
}; |
|
static char *vector_to_string(__u16 vector); |
|
char *vector_to_string(__u16 vector) |
{ |
ASSERT(vector <= VECTOR_MAX); |
|
if (vector >= VECTORS_16_BUNDLE_START) |
return vector_names_16_bundle[(vector-VECTORS_16_BUNDLE_START)/(16*BUNDLE_SIZE)]; |
else |
return vector_names_64_bundle[vector/(64*BUNDLE_SIZE)]; |
} |
|
|
void general_exception(void); |
void general_exception(void) |
{ |
panic("\nGeneral Exception\n"); |
panic("\nGeneral Exception\n"); |
} |
|
|
48,10 → 124,9 |
void break_instruction(void); |
void break_instruction(void) |
{ |
panic("\nBreak Instruction\n"); |
panic("\nBreak Instruction\n"); |
} |
|
|
#define cr_dump(r) {__u64 val; get_control_register(r,val); printf("\ncr"#r":%Q",val);} |
#define ar_dump(r) {__u64 val; get_aplication_register(r,val); printf("\nar"#r":%Q",val);} |
|
63,15 → 138,12 |
int i; |
char *sym; |
|
|
get_shadow_register(16,vector); |
|
|
p=®_DUMP; |
|
for(i=0;i<128;i+=2) printf("gr%d:%Q\tgr%d:%Q\n",i,p[i],i+1,p[i+1]); |
|
|
cr_dump(0); |
cr_dump(1); |
cr_dump(2); |
131,7 → 203,7 |
|
printf("\nPSR:%Q\n",psr); |
|
panic("\nException:%Q\n",vector); |
panic("\nException:%W (%s)\n", (__u16) vector, vector_to_string(vector)); |
} |
|
|