Changeset 25d7709 in mainline for arch/amd64/src/interrupt.c


Ignore:
Timestamp:
2006-03-13T20:08:16Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
631ca4d
Parents:
45d6add
Message:

Nicer ia32 interrupt handlers and structures holding interrupted context data.
Unify the name holding interrupted context data on all architectures to be istate.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/amd64/src/interrupt.c

    r45d6add r25d7709  
    4343#include <proc/thread.h>
    4444
    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)
     45static void print_info_errcode(int n, istate_t *istate)
    6346{
    6447        char *symbol;
    65         __u64 *x = &ctx->stack[0];
     48        __u64 *x = &istate->stack[0];
    6649
    6750        if (!(symbol=get_symtab_entry(x[1])))
     
    6952
    7053        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);
    8164        printf("stack: %Q, %Q, %Q\n", x[5], x[6], x[7]);
    8265        printf("       %Q, %Q, %Q\n", x[8], x[9], x[10]);
    8366        printf("       %Q, %Q, %Q\n", x[11], x[12], x[13]);
    8467        printf("       %Q, %Q, %Q\n", x[14], x[15], x[16]);
    85 //      messy_stack_trace(&x[5]);
    8668}
    8769
     
    9476void (* eoi_function)(void) = NULL;
    9577
    96 void null_interrupt(int n, struct interrupt_context *ctx)
     78void null_interrupt(int n, istate_t *istate)
    9779{
    9880        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]);
    10183        panic("unserviced interrupt\n");
    10284}
    10385
    104 void gp_fault(int n, void *stack)
     86void gp_fault(int n, istate_t *istate)
    10587{
    106         print_info_errcode(n,stack);
     88        print_info_errcode(n, istate);
    10789        panic("general protection fault\n");
    10890}
    10991
    110 void ss_fault(int n, void *stack)
     92void ss_fault(int n, istate_t *istate)
    11193{
    112         print_info_errcode(n,stack);
     94        print_info_errcode(n, istate);
    11395        panic("stack fault\n");
    11496}
    11597
    11698
    117 void nm_fault(int n, void *stack)
     99void nm_fault(int n, istate_t *istate)
    118100{
    119101#ifdef CONFIG_FPU_LAZY     
     
    124106}
    125107
    126 void page_fault(int n, struct interrupt_context *ctx)
     108void page_fault(int n, istate_t *istate)
    127109{
    128110        __address page;
     
    130112        page = read_cr2();
    131113        if (!as_page_fault(page)) {
    132                 print_info_errcode(n,ctx);
     114                print_info_errcode(n, istate);
    133115                printf("Page fault address: %Q\n", page);
    134116                panic("page fault\n");
     
    136118}
    137119
    138 void tlb_shootdown_ipi(int n, void *stack)
     120void tlb_shootdown_ipi(int n, istate_t *istate)
    139121{
    140122        trap_virtual_eoi();
Note: See TracChangeset for help on using the changeset viewer.