06da80e17bddaab1b474253a829bd829c9fcb3c1
[pintos-anon] / src / misc / bochs-2.2.6-triple-fault.patch
1 --- bochs-2.2.6.orig/cpu/exception.cc 2006-01-25 14:20:00.000000000 -0800
2 +++ bochs-2.2.6/cpu/exception.cc 2006-04-08 13:01:18.000000000 -0700
3 @@ -841,6 +841,12 @@ void BX_CPU_C::exception(unsigned vector
4  
5    BX_CPU_THIS_PTR errorno++;
6    if (BX_CPU_THIS_PTR errorno >= 3) {
7 +#if BX_GDBSTUB
8 +    if (bx_dbg.gdbstub_enabled) {
9 +        fprintf(stderr, "Triple fault: stopping for gdb\n");
10 +        longjmp(BX_CPU_THIS_PTR jmp_buf_env, 1);
11 +    }
12 +#endif
13  #if BX_RESET_ON_TRIPLE_FAULT
14      BX_ERROR(("exception(): 3rd (%d) exception with no resolution, shutdown status is %02xh, resetting", vector, DEV_cmos_get_reg(0x0f)));
15      debug(BX_CPU_THIS_PTR prev_eip);
16 @@ -860,6 +866,12 @@ void BX_CPU_C::exception(unsigned vector
17  
18    /* if 1st was a double fault (software INT?), then shutdown */
19    if ( (BX_CPU_THIS_PTR errorno==2) && (BX_CPU_THIS_PTR curr_exception[0]==BX_ET_DOUBLE_FAULT) ) {
20 +#if BX_GDBSTUB
21 +    if (bx_dbg.gdbstub_enabled) {
22 +        fprintf(stderr, "Triple fault: stopping for gdb\n");
23 +        longjmp(BX_CPU_THIS_PTR jmp_buf_env, 1);
24 +    }
25 +#endif
26  #if BX_RESET_ON_TRIPLE_FAULT
27      BX_INFO(("exception(): triple fault encountered, shutdown status is %02xh, resetting", DEV_cmos_get_reg(0x0f)));
28      debug(BX_CPU_THIS_PTR prev_eip);
29
30 Diff finished at Sat Apr  8 13:07:40