Changeset 25d7709 in mainline for arch/ia32/src/interrupt.c
- Timestamp:
- 2006-03-13T20:08:16Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 631ca4d
- Parents:
- 45d6add
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/src/interrupt.c
r45d6add r25d7709 50 50 void (* eoi_function)(void) = NULL; 51 51 52 #define PRINT_INFO_ERRCODE(st) { \ 53 __native *x = (__native *) st; \ 54 char *symbol = get_symtab_entry(x[1]); \ 52 #define PRINT_INFO_ERRCODE(istate) do { \ 53 char *symbol = get_symtab_entry(istate->eip); \ 55 54 if (!symbol) \ 56 55 symbol = ""; \ 57 56 printf("----------------EXCEPTION OCCURED----------------\n"); \ 58 printf("%%eip: %X (%s)\n", x[1],symbol); \59 printf("ERROR_WORD=%X\n", x[0]); \60 printf("%%cs=%X,flags=%X\n", x[2], x[3]); \57 printf("%%eip: %X (%s)\n",istate->eip,symbol); \ 58 printf("ERROR_WORD=%X\n", istate->error_word); \ 59 printf("%%cs=%X,flags=%X\n", istate->cs, istate->eflags); \ 61 60 printf("%%eax=%X, %%ebx=%X, %%ecx=%X, %%edx=%X\n",\ 62 x[-2],x[-5],x[-3],x[-4]); \61 istate->eax,istate->ebx,istate->ecx,istate->edx); \ 63 62 printf("%%esi=%X, %%edi=%X, %%ebp=%X, %%esp=%X\n",\ 64 x[-8],x[-9],x[-1],x); \65 printf("stack: %X, %X, %X, %X\n", x[4], x[5], x[6], x[7]); \66 printf(" %X, %X, %X, %X\n", x[8], x[9], x[10], x[11]); \67 } 63 istate->esi,istate->edi,istate->ebp,istate->esp); \ 64 printf("stack: %X, %X, %X, %X\n", istate->stack[0], istate->stack[1], istate->stack[2], istate->stack[3]); \ 65 printf(" %X, %X, %X, %X\n", istate->stack[4], istate->stack[5], istate->stack[6], istate->stack[7]); \ 66 } while(0) 68 67 69 void null_interrupt(int n, void *st)68 void null_interrupt(int n, istate_t *istate) 70 69 { 71 __native *stack = (__native *) st; 72 73 printf("int %d: null_interrupt\n", n); 74 printf("stack: %L, %L, %L, %L\n", stack[0], stack[1], stack[2], stack[3]); 75 panic("unserviced interrupt\n"); 70 PRINT_INFO_ERRCODE(istate); 71 panic("unserviced interrupt: %d\n", n); 76 72 } 77 73 78 void gp_fault(int n, void *stack)74 void gp_fault(int n, istate_t *istate) 79 75 { 80 PRINT_INFO_ERRCODE( stack);76 PRINT_INFO_ERRCODE(istate); 81 77 panic("general protection fault\n"); 82 78 } 83 79 84 void ss_fault(int n, void *stack)80 void ss_fault(int n, istate_t *istate) 85 81 { 86 PRINT_INFO_ERRCODE( stack);82 PRINT_INFO_ERRCODE(istate); 87 83 panic("stack fault\n"); 88 84 } 89 85 90 91 void nm_fault(int n, void *stack) 86 void nm_fault(int n, istate_t *istate) 92 87 { 93 88 #ifdef CONFIG_FPU_LAZY … … 98 93 } 99 94 100 101 102 void page_fault(int n, void *stack) 95 void page_fault(int n, istate_t *istate) 103 96 { 104 97 __address page; … … 106 99 page = read_cr2(); 107 100 if (!as_page_fault(page)) { 108 PRINT_INFO_ERRCODE( stack);101 PRINT_INFO_ERRCODE(istate); 109 102 printf("page fault address: %X\n", page); 110 103 panic("page fault\n"); … … 112 105 } 113 106 114 void syscall(int n, void *st)107 void syscall(int n, istate_t *istate) 115 108 { 116 __native *stack = (__native *) st;117 118 109 interrupts_enable(); 119 if ( stack[-2]< SYSCALL_END)120 stack[-2] = syscall_table[stack[-2]](stack[-5], stack[-3], stack[-4]);110 if (istate->edx < SYSCALL_END) 111 istate->eax = syscall_table[istate->edx](istate->eax, istate->ebx, istate->ecx); 121 112 else 122 panic("Undefined syscall %d", stack[-2]);113 panic("Undefined syscall %d", istate->edx); 123 114 interrupts_disable(); 124 115 } 125 116 126 void tlb_shootdown_ipi(int n, void *stack)117 void tlb_shootdown_ipi(int n, istate_t *istate) 127 118 { 128 119 trap_virtual_eoi();
Note:
See TracChangeset
for help on using the changeset viewer.