Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 387 → Rev 388

/SPARTAN/trunk/arch/ia64/src/interrupt_handler.c
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=&REG_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));
}