Changeset 25d7709 in mainline for arch/mips32/src/exception.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/mips32/src/exception.c

    r45d6add r25d7709  
    6363};
    6464
    65 static void print_regdump(struct exception_regdump *pstate)
     65static void print_regdump(istate_t *istate)
    6666{
    6767        char *pcsymbol = "";
    6868        char *rasymbol = "";
    6969
    70         char *s = get_symtab_entry(pstate->epc);
     70        char *s = get_symtab_entry(istate->epc);
    7171        if (s)
    7272                pcsymbol = s;
    73         s = get_symtab_entry(pstate->ra);
     73        s = get_symtab_entry(istate->ra);
    7474        if (s)
    7575                rasymbol = s;
    7676       
    77         printf("PC: %X(%s) RA: %X(%s), SP(%P)\n",pstate->epc,pcsymbol,
    78                pstate->ra,rasymbol, pstate->sp);
    79 }
    80 
    81 static void unhandled_exception(int n, struct exception_regdump *pstate)
    82 {
    83         print_regdump(pstate);
     77        printf("PC: %X(%s) RA: %X(%s), SP(%P)\n",istate->epc,pcsymbol,
     78               istate->ra,rasymbol, istate->sp);
     79}
     80
     81static void unhandled_exception(int n, istate_t *istate)
     82{
     83        print_regdump(istate);
    8484        panic("unhandled exception %s\n", exctable[n]);
    8585}
    8686
    87 static void breakpoint_exception(int n, struct exception_regdump *pstate)
     87static void breakpoint_exception(int n, istate_t *istate)
    8888{
    8989#ifdef CONFIG_DEBUG
    90         debugger_bpoint(pstate);
     90        debugger_bpoint(istate);
    9191#else
    9292        /* it is necessary to not re-execute BREAK instruction after
    9393           returning from Exception handler
    9494           (see page 138 in R4000 Manual for more information) */
    95         pstate->epc += 4;
     95        istate->epc += 4;
    9696#endif
    9797}
    9898
    99 static void tlbmod_exception(int n, struct exception_regdump *pstate)
    100 {
    101         tlb_modified(pstate);
    102 }
    103 
    104 static void tlbinv_exception(int n, struct exception_regdump *pstate)
    105 {
    106         tlb_invalid(pstate);
     99static void tlbmod_exception(int n, istate_t *istate)
     100{
     101        tlb_modified(istate);
     102}
     103
     104static void tlbinv_exception(int n, istate_t *istate)
     105{
     106        tlb_invalid(istate);
    107107}
    108108
    109109#ifdef CONFIG_FPU_LAZY
    110 static void cpuns_exception(int n, struct exception_regdump *pstate)
     110static void cpuns_exception(int n, istate_t *istate)
    111111{
    112112        if (cp0_cause_coperr(cp0_cause_read()) == fpu_cop_id)
     
    117117#endif
    118118
    119 static void interrupt_exception(int n, struct exception_regdump *pstate)
     119static void interrupt_exception(int n, istate_t *istate)
    120120{
    121121        __u32 cause;
     
    127127        for (i = 0; i < 8; i++)
    128128                if (cause & (1 << i))
    129                         exc_dispatch(i+INT_OFFSET, pstate);
     129                        exc_dispatch(i+INT_OFFSET, istate);
    130130}
    131131
    132132#include <debug.h>
    133133/** Handle syscall userspace call */
    134 static void syscall_exception(int n, struct exception_regdump *pstate)
     134static void syscall_exception(int n, istate_t *istate)
    135135{
    136136        interrupts_enable();
    137         if (pstate->a3 < SYSCALL_END)
    138                 pstate->v0 = syscall_table[pstate->a3](pstate->a0,
    139                                                        pstate->a1,
    140                                                        pstate->a2);
     137        if (istate->a3 < SYSCALL_END)
     138                istate->v0 = syscall_table[istate->a3](istate->a0,
     139                                                       istate->a1,
     140                                                       istate->a2);
    141141        else
    142                 panic("Undefined syscall %d", pstate->a3);
     142                panic("Undefined syscall %d", istate->a3);
     143        istate->epc += 4;
    143144        interrupts_disable();
    144         pstate->epc += 4;
    145 }
    146 
    147 
    148 void exception(struct exception_regdump *pstate)
     145}
     146
     147void exception(istate_t *istate)
    149148{
    150149        int cause;
     
    164163                                                cp0_status_um_bit));
    165164
    166         /* Save pstate so that the threads can access it */
    167         /* If THREAD->pstate is set, this is nested exception,
     165        /* Save istate so that the threads can access it */
     166        /* If THREAD->istate is set, this is nested exception,
    168167         * do not rewrite it
    169168         */
    170         if (THREAD && !THREAD->pstate)
    171                 THREAD->pstate = pstate;
     169        if (THREAD && !THREAD->istate)
     170                THREAD->istate = istate;
    172171
    173172        cause = cp0_cause_read();
    174173        excno = cp0_cause_excno(cause);
    175174        /* Dispatch exception */
    176         exc_dispatch(excno, pstate);
     175        exc_dispatch(excno, istate);
    177176
    178177        /* Set to NULL, so that we can still support nested
     
    180179         * TODO: We should probably set EXL bit before this command,
    181180         * nesting. On the other hand, if some exception occurs between
    182          * here and ERET, it won't set anything on the pstate anyway.
     181         * here and ERET, it won't set anything on the istate anyway.
    183182         */
    184183        if (THREAD)
    185                 THREAD->pstate = NULL;
     184                THREAD->istate = NULL;
    186185}
    187186
Note: See TracChangeset for help on using the changeset viewer.