Changeset 3f596c9 in mainline for kernel/arch/sparc32/src/trap_table.S


Ignore:
Timestamp:
2013-11-03T20:31:54Z (10 years ago)
Author:
Jakub Klama <jakub.klama@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9f9d725
Parents:
bbb94545
Message:

Bugfixing preemptive trap handlers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc32/src/trap_table.S

    rbbb94545 r3f596c9  
    211211        /* dump registers to stack */
    212212        save
     213        st %l0, [%sp + 0] ! XXX
    213214        std %l0, [%sp +  0]
    214215        std %l2, [%sp +  8]
     
    228229        inc %g7
    229230
    230         /* dump registers to uwb */
    2312312:      save
    232232        std %l0, [%g6 +  0]
     
    240240        add %g4, 64, %g4
    241241
     242        /* check whether it's the last user window to be saved */
     243        mov %psr, %l4
     244        and %l4, 0x7, %l4
     245        inc %l4
     246        cmp %g7, %l4
     247        bne 3f
     248        nop
     249
     250        /* clear uspace window mark */
     251        clr %g7
     252
    2422533:      /* back to where we should be */
    243254        mov %g5, %l5
     
    273284        nop
    274285
    275         /* load registers from stack */
    276         restore
    277         restore
    278         /* Save invalid window data */
     286        restore
     287        restore
    279288        mov %l5, %g5            ! kernel stack pointer
    280289        mov %l6, %g6            ! kernel wbuf
    281290        mov %l7, %g7
    282 
    283         /* we should check whether window needs to be saved
    284          * to kernel stack or uwb
    285          */
    286         cmp %g7, 0
    287         bne 3f
    288         nop
    289291
    290292        ldd [%sp +  0], %l0
     
    299301        nop
    300302
    301         /* load registers from uwb */
    3023031:      restore
    303304        restore
    304         /* Save invalid window data */
    305305        mov %l5, %g5            ! kernel stack pointer
    306306        mov %l6, %g6            ! kernel wbuf
    307307        mov %l7, %g7
    308 3:      sub %g6, 64, %g6
     308        sub %g6, 64, %g6
    309309        ldd [%g6 +  0], %l0
    310310        ldd [%g6 +  8], %l2
     
    362362        switch_to_invalid %g5, %g6
    363363        /* set uspace window mark */
    364         mov %psr, %l7
     364        mov %g6, %l7
    365365        and %l7, 0x7, %l7
    366366        inc %l7
     
    369369        switch_back %g5, %g6
    370370        mov %g7, %sp
    371         mov %sp, %fp
    372 
    373         /* Set secondary invalid window mark */
    374         add %g7, 1, %l7
     371//      mov %sp, %fp
    375372
    3763735:      /* Set up stack frame */
     
    379376        /* Save trap data on stack */
    380377        mov %psr, %l0
    381         st %l1, [%fp - 4]
    382         st %l2, [%fp - 8]
    383         st %l0, [%fp - 12]
     378        st %l1, [%sp + 92]
     379        st %l2, [%sp + 96]
     380        st %l0, [%sp + 100]
    384381
    385382        /* Enable traps */
     
    397394
    398395        /* Return from handler */
    399         ld [%fp - 4], %l1
    400         ld [%fp - 8], %l2
    401         ld [%fp - 12], %l0
     396        ld [%sp + 92], %l1
     397        ld [%sp + 96], %l2
     398        ld [%sp + 100], %l0
    402399        mov %l0, %psr
    403400        nop
Note: See TracChangeset for help on using the changeset viewer.