/kernel/trunk/arch/sparc64/src/context.S |
---|
61,6 → 61,8 |
stx %l5, [\r + OFFSET_L5] |
stx %l6, [\r + OFFSET_L6] |
stx %l7, [\r + OFFSET_L7] |
rdpr %cleanwin, %g1 |
stx %g1, [\r + OFFSET_CLEANWIN] |
.endm |
.macro CONTEXT_LOAD r |
82,6 → 84,8 |
ldx [\r + OFFSET_L5], %l5 |
ldx [\r + OFFSET_L6], %l6 |
ldx [\r + OFFSET_L7], %l7 |
ldx [\r + OFFSET_CLEANWIN], %g1 |
wrpr %g1, %g0, %cleanwin |
.endm |
context_save_arch: |
/kernel/trunk/arch/sparc64/src/trap/trap_table.S |
---|
37,7 → 37,12 |
* This arrangement is beneficial because kernel handlers stay on their |
* link-time addresses which is good for debugging. |
*/ |
.register %g2, #scratch |
.register %g3, #scratch |
.register %g6, #scratch |
.register %g7, #scratch |
.text |
#include <arch/trap/trap_table.h> |
202,3 → 207,20 |
.global trap_table_save |
trap_table_save: |
.space TABLE_SIZE, 0 |
/* Trap handler that explicitly saves global registers. |
* |
* Input registers: |
* %l0 Address of function to call. |
* Output registers: |
* %l1 - %l7 Copy of %g1 - %g7 |
*/ |
.global saving_handler |
saving_handler: |
SAVE_GLOBALS |
call %l0 |
nop |
RESTORE_GLOBALS |
restore /* matches the save instruction from the top-level handler */ |
retry |
/kernel/trunk/arch/sparc64/src/panic.S |
---|
28,10 → 28,15 |
.text |
#include <arch/stack.h> |
.global panic_printf |
panic_printf: |
save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp |
call printf |
nop |
call halt |
nop |
/* Not reached. */ |
restore |