Changeset 25d7709 in mainline for arch/amd64
- Timestamp:
- 2006-03-13T20:08:16Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 631ca4d
- Parents:
- 45d6add
- Location:
- arch/amd64
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/include/context.h
r45d6add r25d7709 59 59 } __attribute__ ((packed)); 60 60 61 /** This is passed to interrupt handlers */62 struct interrupt_context {63 __u64 rax;64 __u64 rbx;65 __u64 rcx;66 __u64 rdx;67 __u64 rsi;68 __u64 rdi;69 __u64 r8;70 __u64 r9;71 __u64 r10;72 __u64 r11;73 __u64 r12;74 __u64 r13;75 __u64 r14;76 __u64 r15;77 /* These 2 items MUST be last parts of the structure */78 __u64 rbp;79 __u64 stack[0]; /* Additional data on stack */80 } __attribute__ ((packed));81 82 61 #endif -
arch/amd64/include/interrupt.h
r45d6add r25d7709 61 61 #define VECTOR_WAKEUP_IPI (IVT_FREEBASE+1) 62 62 63 /** This is passed to interrupt handlers */ 64 struct istate { 65 __u64 rax; 66 __u64 rbx; 67 __u64 rcx; 68 __u64 rdx; 69 __u64 rsi; 70 __u64 rdi; 71 __u64 r8; 72 __u64 r9; 73 __u64 r10; 74 __u64 r11; 75 __u64 r12; 76 __u64 r13; 77 __u64 r14; 78 __u64 r15; 79 /* These 2 items MUST be last parts of the structure */ 80 __u64 rbp; 81 __u64 stack[0]; /* Additional data on stack */ 82 } __attribute__ ((packed)); 83 63 84 extern void (* disable_irqs_function)(__u16 irqmask); 64 85 extern void (* enable_irqs_function)(__u16 irqmask); 65 86 extern void (* eoi_function)(void); 66 87 67 extern void null_interrupt(int n, struct interrupt_context *ctx);68 extern void gp_fault(int n, void *stack);69 extern void nm_fault(int n, void *stack);70 extern void ss_fault(int n, void *stack);71 extern void page_fault(int n, struct interrupt_context *ctx);72 extern void syscall(int n, void *stack);73 extern void tlb_shootdown_ipi(int n, void *stack);88 extern void null_interrupt(int n, istate_t *istate); 89 extern void gp_fault(int n, istate_t *istate); 90 extern void nm_fault(int n, istate_t *istate); 91 extern void ss_fault(int n, istate_t *istate); 92 extern void page_fault(int n, istate_t *istate); 93 extern void syscall(int n, istate_t *istate); 94 extern void tlb_shootdown_ipi(int n, istate_t *istate); 74 95 75 96 extern void trap_virtual_enable_irqs(__u16 irqmask); -
arch/amd64/src/interrupt.c
r45d6add r25d7709 43 43 #include <proc/thread.h> 44 44 45 /* 46 static void messy_stack_trace(__native *stack) 47 { 48 __native *upper_limit = (__native *)(((__native)get_stack_base()) + STACK_SIZE); 49 char *symbol; 50 51 printf("Stack contents: "); 52 while (stack < upper_limit) { 53 symbol = get_symtab_entry((__address)*stack); 54 if (symbol) 55 printf("%s, ", symbol); 56 stack++; 57 } 58 printf("\n"); 59 } 60 */ 61 62 static void print_info_errcode(int n, struct interrupt_context *ctx) 45 static void print_info_errcode(int n, istate_t *istate) 63 46 { 64 47 char *symbol; 65 __u64 *x = & ctx->stack[0];48 __u64 *x = &istate->stack[0]; 66 49 67 50 if (!(symbol=get_symtab_entry(x[1]))) … … 69 52 70 53 printf("-----EXCEPTION(%d) OCCURED----- ( %s )\n",n,__FUNCTION__); 71 printf("%%rip: %Q (%s)\n", ctx->stack[1],symbol);72 printf("ERROR_WORD=%Q\n", ctx->stack[0]);73 printf("%%rcs=%Q,flags=%Q, %%cr0=%Q\n", ctx->stack[2],74 ctx->stack[3],read_cr0());75 printf("%%rax=%Q, %%rbx=%Q, %%rcx=%Q\n", ctx->rax,ctx->rbx,ctx->rcx);76 printf("%%rdx=%Q, %%rsi=%Q, %%rdi=%Q\n", ctx->rdx,ctx->rsi,ctx->rdi);77 printf("%%r8 =%Q, %%r9 =%Q, %%r10=%Q\n", ctx->r8,ctx->r9,ctx->r10);78 printf("%%r11=%Q, %%r12=%Q, %%r13=%Q\n", ctx->r11,ctx->r12,ctx->r13);79 printf("%%r14=%Q, %%r15=%Q, %%rsp=%Q\n", ctx->r14,ctx->r15,&ctx->stack[0]);80 printf("%%rbp=%Q\n", ctx->rbp);54 printf("%%rip: %Q (%s)\n",istate->stack[1],symbol); 55 printf("ERROR_WORD=%Q\n", istate->stack[0]); 56 printf("%%rcs=%Q,flags=%Q, %%cr0=%Q\n", istate->stack[2], 57 istate->stack[3],read_cr0()); 58 printf("%%rax=%Q, %%rbx=%Q, %%rcx=%Q\n",istate->rax,istate->rbx,istate->rcx); 59 printf("%%rdx=%Q, %%rsi=%Q, %%rdi=%Q\n",istate->rdx,istate->rsi,istate->rdi); 60 printf("%%r8 =%Q, %%r9 =%Q, %%r10=%Q\n",istate->r8,istate->r9,istate->r10); 61 printf("%%r11=%Q, %%r12=%Q, %%r13=%Q\n",istate->r11,istate->r12,istate->r13); 62 printf("%%r14=%Q, %%r15=%Q, %%rsp=%Q\n",istate->r14,istate->r15,&istate->stack[0]); 63 printf("%%rbp=%Q\n",istate->rbp); 81 64 printf("stack: %Q, %Q, %Q\n", x[5], x[6], x[7]); 82 65 printf(" %Q, %Q, %Q\n", x[8], x[9], x[10]); 83 66 printf(" %Q, %Q, %Q\n", x[11], x[12], x[13]); 84 67 printf(" %Q, %Q, %Q\n", x[14], x[15], x[16]); 85 // messy_stack_trace(&x[5]);86 68 } 87 69 … … 94 76 void (* eoi_function)(void) = NULL; 95 77 96 void null_interrupt(int n, struct interrupt_context *ctx)78 void null_interrupt(int n, istate_t *istate) 97 79 { 98 80 printf("-----EXCEPTION(%d) OCCURED----- ( %s )\n",n,__FUNCTION__); \ 99 printf("stack: %X, %X, %X, %X\n", ctx->stack[0], ctx->stack[1],100 ctx->stack[2], ctx->stack[3]);81 printf("stack: %X, %X, %X, %X\n", istate->stack[0], istate->stack[1], 82 istate->stack[2], istate->stack[3]); 101 83 panic("unserviced interrupt\n"); 102 84 } 103 85 104 void gp_fault(int n, void *stack)86 void gp_fault(int n, istate_t *istate) 105 87 { 106 print_info_errcode(n, stack);88 print_info_errcode(n, istate); 107 89 panic("general protection fault\n"); 108 90 } 109 91 110 void ss_fault(int n, void *stack)92 void ss_fault(int n, istate_t *istate) 111 93 { 112 print_info_errcode(n, stack);94 print_info_errcode(n, istate); 113 95 panic("stack fault\n"); 114 96 } 115 97 116 98 117 void nm_fault(int n, void *stack)99 void nm_fault(int n, istate_t *istate) 118 100 { 119 101 #ifdef CONFIG_FPU_LAZY … … 124 106 } 125 107 126 void page_fault(int n, struct interrupt_context *ctx)108 void page_fault(int n, istate_t *istate) 127 109 { 128 110 __address page; … … 130 112 page = read_cr2(); 131 113 if (!as_page_fault(page)) { 132 print_info_errcode(n, ctx);114 print_info_errcode(n, istate); 133 115 printf("Page fault address: %Q\n", page); 134 116 panic("page fault\n"); … … 136 118 } 137 119 138 void tlb_shootdown_ipi(int n, void *stack)120 void tlb_shootdown_ipi(int n, istate_t *istate) 139 121 { 140 122 trap_virtual_eoi();
Note:
See TracChangeset
for help on using the changeset viewer.