46,9 → 46,46 |
WORD TSS_control[TSSMax]; |
BYTE ll_FPU_stdctx[FPU_CONTEXT_SIZE]; |
|
void debug_info(void) { |
static DWORD fault_ip; |
static DWORD fault_cs; |
static DWORD error_code; |
static DWORD fault_eflag; |
static DWORD sp; |
static DWORD fault_sp; |
static DWORD data0; |
static DWORD data1; |
static DWORD data2; |
static DWORD sdata4; |
static DWORD sdata8; |
|
asm (" movl %%esp,%0\n\t":"=r"(sp)); |
asm (" movl -8(%%ebp),%0\n\t":"=r"(sdata8)); |
asm (" movl -4(%%ebp),%0\n\t":"=r"(sdata4)); |
asm (" movl 0(%%ebp),%0\n\t":"=r"(data0)); |
asm (" movl 4(%%ebp),%0\n\t":"=r"(error_code)); |
asm (" movl 8(%%ebp),%0\n\t":"=r"(fault_ip)); |
asm (" movl 12(%%ebp),%0\n\t":"=r"(fault_cs)); |
asm (" movl 16(%%ebp),%0\n\t":"=r"(fault_eflag)); |
asm (" movl 20(%%ebp),%0\n\t":"=r"(fault_sp)); |
asm (" movl 24(%%ebp),%0\n\t":"=r"(data1)); |
message(":F -8: %lx:", sdata8); |
message(":F -4: %lx:", sdata4); |
message(":F 0: %lx:", data0); |
message(":F ec/4: %lx:", error_code); |
message(":F ip/8: %lx:", fault_ip); |
message(":F cs/12 : %lx:", fault_cs); |
message(":F eflag/16 : %lx:", fault_eflag); |
message(":F sp/20 : %lx:", fault_sp); |
message(":F 24 : %lx:", data1); |
|
} |
|
|
void ll_exc_hook(int i) |
{ |
static char *exc_mess[] = { |
|
static char *exc_mess[] = { |
"#Division by 0", |
"#Debug fault", |
"#NMI detected", |
85,7 → 122,9 |
extern DWORD *smain; |
#endif |
|
/* Math error! FPU has to be acknowledgded */ |
|
|
/* Math error! FPU has to be acknowledgded */ |
if (code == '2') ll_out(0x0F0,0); |
|
message("Exception %d occurred\n", i); |
103,6 → 142,11 |
} |
#endif |
/* halt(); */ |
|
message("Actual stack : %x\n",get_SP()); |
|
dump_TSS(get_TR()); |
|
ll_abort(exc_code[i]); |
} |
|