1.1 --- a/stage2/handlers.S Fri Feb 26 00:23:58 2016 +0100
1.2 +++ b/stage2/handlers.S Fri Feb 26 00:44:01 2016 +0100
1.3 @@ -21,6 +21,8 @@
1.4 .text
1.5 .extern tlb_handle
1.6 .extern irq_handle
1.7 +.extern current_stack_pointer
1.8 +.extern current_task
1.9 .globl tlb_handler
1.10 .globl interrupt_handler
1.11 .set noreorder
1.12 @@ -46,11 +48,28 @@
1.13 jal save_state
1.14 nop
1.15
1.16 + /* Record the stack pointer. */
1.17 +
1.18 + la $k0, current_stack_pointer
1.19 + sw $sp, 0($k0)
1.20 +
1.21 /* Invoke the handler. */
1.22
1.23 jal irq_handle
1.24 nop
1.25
1.26 + /* Switch the stack pointer. */
1.27 +
1.28 + la $k0, current_stack_pointer
1.29 + lw $sp, 0($k0)
1.30 +
1.31 + /* Set the current task ASID. */
1.32 +
1.33 + la $k0, current_task
1.34 + lw $k1, 0($k0)
1.35 + mtc0 $k1, $10 /* CP0_ENTRYHI */
1.36 + nop
1.37 +
1.38 j load_and_return
1.39 nop
1.40