diff options
author | RajithaY <rajithax.yerrumsetty@intel.com> | 2017-04-25 03:31:15 -0700 |
---|---|---|
committer | Rajitha Yerrumchetty <rajithax.yerrumsetty@intel.com> | 2017-05-22 06:48:08 +0000 |
commit | bb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch) | |
tree | ca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/roms/openbios/arch/sparc64/vectors.S | |
parent | a14b48d18a9ed03ec191cf16b162206998a895ce (diff) |
Adding qemu as a submodule of KVMFORNFV
This Patch includes the changes to add qemu as a submodule to
kvmfornfv repo and make use of the updated latest qemu for the
execution of all testcase
Change-Id: I1280af507a857675c7f81d30c95255635667bdd7
Signed-off-by:RajithaY<rajithax.yerrumsetty@intel.com>
Diffstat (limited to 'qemu/roms/openbios/arch/sparc64/vectors.S')
-rw-r--r-- | qemu/roms/openbios/arch/sparc64/vectors.S | 591 |
1 files changed, 0 insertions, 591 deletions
diff --git a/qemu/roms/openbios/arch/sparc64/vectors.S b/qemu/roms/openbios/arch/sparc64/vectors.S deleted file mode 100644 index 9d86b6bd8..000000000 --- a/qemu/roms/openbios/arch/sparc64/vectors.S +++ /dev/null @@ -1,591 +0,0 @@ -/* - * <vectors.S> - * - * Sparc V9 Trap Table(s) with SpitFire/Cheetah extensions. - * - * Copyright (C) 1996, 2001 David S. Miller (davem@caip.rutgers.edu) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License V2 - * as published by the Free Software Foundation - */ - -#define __ASSEMBLY__ -#include "cpustate.h" -#include "pstate.h" -#include <asm/asi.h> -#define ASI_BP ASI_PHYS_BYPASS_EC_E -#define PROM_ADDR 0x1fff0000000 -#define SER_ADDR 0x1fe020003f8 -#define TICK_INT_DIS 0x8000000000000000 -#define TICK_INTERVAL 1*1000*1000 - - .section ".text.vectors", "ax" - .align 16384 -/* Sparc64 trap table */ - .globl trap_table, __divide_error, softint_irq, softint_irq_tl1 - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch - .register %g7, #scratch -trap_table: -#define SPILL_WINDOW \ - btst 1, %sp; \ - be spill_32bit; \ - nop; \ - stx %l0, [%sp + STACK_BIAS + 0x00]; \ - stx %l1, [%sp + STACK_BIAS + 0x08]; \ - stx %l2, [%sp + STACK_BIAS + 0x10]; \ - stx %l3, [%sp + STACK_BIAS + 0x18]; \ - stx %l4, [%sp + STACK_BIAS + 0x20]; \ - stx %l5, [%sp + STACK_BIAS + 0x28]; \ - stx %l6, [%sp + STACK_BIAS + 0x30]; \ - stx %l7, [%sp + STACK_BIAS + 0x38]; \ - stx %i0, [%sp + STACK_BIAS + 0x40]; \ - stx %i1, [%sp + STACK_BIAS + 0x48]; \ - stx %i2, [%sp + STACK_BIAS + 0x50]; \ - stx %i3, [%sp + STACK_BIAS + 0x58]; \ - stx %i4, [%sp + STACK_BIAS + 0x60]; \ - stx %i5, [%sp + STACK_BIAS + 0x68]; \ - stx %i6, [%sp + STACK_BIAS + 0x70]; \ - stx %i7, [%sp + STACK_BIAS + 0x78]; \ - saved; retry; nop; nop; nop; nop; nop; nop; \ - nop; nop; nop; nop; nop; - -#define FILL_WINDOW \ - btst 1, %sp; \ - be fill_32bit; \ - nop; \ - ldx [%sp + STACK_BIAS + 0x00], %l0; \ - ldx [%sp + STACK_BIAS + 0x08], %l1; \ - ldx [%sp + STACK_BIAS + 0x10], %l2; \ - ldx [%sp + STACK_BIAS + 0x18], %l3; \ - ldx [%sp + STACK_BIAS + 0x20], %l4; \ - ldx [%sp + STACK_BIAS + 0x28], %l5; \ - ldx [%sp + STACK_BIAS + 0x30], %l6; \ - ldx [%sp + STACK_BIAS + 0x38], %l7; \ - ldx [%sp + STACK_BIAS + 0x40], %i0; \ - ldx [%sp + STACK_BIAS + 0x48], %i1; \ - ldx [%sp + STACK_BIAS + 0x50], %i2; \ - ldx [%sp + STACK_BIAS + 0x58], %i3; \ - ldx [%sp + STACK_BIAS + 0x60], %i4; \ - ldx [%sp + STACK_BIAS + 0x68], %i5; \ - ldx [%sp + STACK_BIAS + 0x70], %i6; \ - ldx [%sp + STACK_BIAS + 0x78], %i7; \ - restored; retry; nop; nop; nop; nop; nop; nop; \ - nop; nop; nop; nop; nop; - -#define CLEAN_WINDOW \ - rdpr %cleanwin, %l0; add %l0, 1, %l0; \ - wrpr %l0, 0x0, %cleanwin; \ - clr %o0; clr %o1; clr %o2; clr %o3; \ - clr %o4; clr %o5; clr %o6; clr %o7; \ - clr %l0; clr %l1; clr %l2; clr %l3; \ - clr %l4; clr %l5; clr %l6; clr %l7; \ - retry; \ - nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop; - -#define TRAP_IRQ(routine, level) \ - ba routine; mov level, %g1; nop; nop; nop; nop; nop; nop; -#define BTRAP(lvl) \ - ba bug; mov lvl, %g1; nop; nop; nop; nop; nop; nop; -#define BTRAPTL1(lvl) BTRAP(lvl) -#define BTRAPS(x) BTRAP(x) BTRAP(x+1) BTRAP(x+2) BTRAP(x+3) BTRAP(x+4) BTRAP(x+5) BTRAP(x+6) BTRAP(x+7) -#define BTRAPS4(x) BTRAP(x) BTRAP(x+1) BTRAP(x+2) BTRAP(x+3) -#define TRAP_HANDLER(routine) ba routine; nop; nop; nop; nop; nop; nop; nop; - -#define STACK_BIAS 2047 - .globl sparc64_ttable_tl0, sparc64_ttable_tl1 -sparc64_ttable_tl0: - ba entry; nop; nop; nop; nop; nop; nop; nop;! XXX remove - ba entry; nop; nop; nop; nop; nop; nop; nop;! Power-on reset - ba entry; nop; nop; nop; nop; nop; nop; nop;! Watchdog reset - ba entry; nop; nop; nop; nop; nop; nop; nop;! External reset - ba entry; nop; nop; nop; nop; nop; nop; nop;! Software reset - ba entry; nop; nop; nop; nop; nop; nop; nop;! RED state - BTRAP(0x06) BTRAP(0x07) BTRAPS(0x08) - BTRAPS(0x10) BTRAPS(0x18) - BTRAP(0x20) BTRAP(0x21) BTRAP(0x22) BTRAP(0x23) - CLEAN_WINDOW ! 24-27 - BTRAPS(0x28) - BTRAPS(0x30) BTRAPS(0x38) - BTRAP(0x40) BTRAP(0x41) BTRAP(0x42) BTRAP(0x43) -tl0_irq4: TRAP_IRQ(handler_irq, 4) -tl0_irq5: TRAP_IRQ(handler_irq, 5) TRAP_IRQ(handler_irq, 6) -tl0_irq7: TRAP_IRQ(handler_irq, 7) TRAP_IRQ(handler_irq, 8) -tl0_irq9: TRAP_IRQ(handler_irq, 9) TRAP_IRQ(handler_irq, 10) -tl0_irq11: TRAP_IRQ(handler_irq, 11) TRAP_IRQ(handler_irq, 12) -tl0_irq13: TRAP_IRQ(handler_irq, 13) -tl0_irq14: TRAP_IRQ(softint_irq, 14) -tl0_irq15: TRAP_IRQ(handler_irq, 15) - BTRAPS(0x50) BTRAPS(0x58) - BTRAPS4(0x60) - TRAP_HANDLER(reload_IMMU_tlb) ! 0x64 : instruction_access_MMU_miss - TRAP_HANDLER(reload_IMMU_tlb) ! 0x65 : instruction_access_MMU_miss - TRAP_HANDLER(reload_IMMU_tlb) ! 0x66 : instruction_access_MMU_miss - TRAP_HANDLER(reload_IMMU_tlb) ! 0x67 : instruction_access_MMU_miss - TRAP_HANDLER(reload_DMMU_tlb) ! 0x68 : data_access_MMU_miss - TRAP_HANDLER(reload_DMMU_tlb) ! 0x69 : data_access_MMU_miss - TRAP_HANDLER(reload_DMMU_tlb) ! 0x6A : data_access_MMU_miss - TRAP_HANDLER(reload_DMMU_tlb) ! 0x6B : data_access_MMU_miss - BTRAPS4(0x6C) ! data_access_protection - BTRAPS(0x70) BTRAPS(0x78) -tl0_s0n: SPILL_WINDOW -tl0_s1n: SPILL_WINDOW -tl0_s2n: SPILL_WINDOW -tl0_s3n: SPILL_WINDOW -tl0_s4n: SPILL_WINDOW -tl0_s5n: SPILL_WINDOW -tl0_s6n: SPILL_WINDOW -tl0_s7n: SPILL_WINDOW -tl0_s0o: SPILL_WINDOW -tl0_s1o: SPILL_WINDOW -tl0_s2o: SPILL_WINDOW -tl0_s3o: SPILL_WINDOW -tl0_s4o: SPILL_WINDOW -tl0_s5o: SPILL_WINDOW -tl0_s6o: SPILL_WINDOW -tl0_s7o: SPILL_WINDOW -tl0_f0n: FILL_WINDOW -tl0_f1n: FILL_WINDOW -tl0_f2n: FILL_WINDOW -tl0_f3n: FILL_WINDOW -tl0_f4n: FILL_WINDOW -tl0_f5n: FILL_WINDOW -tl0_f6n: FILL_WINDOW -tl0_f7n: FILL_WINDOW -tl0_f0o: FILL_WINDOW -tl0_f1o: FILL_WINDOW -tl0_f2o: FILL_WINDOW -tl0_f3o: FILL_WINDOW -tl0_f4o: FILL_WINDOW -tl0_f5o: FILL_WINDOW -tl0_f6o: FILL_WINDOW -tl0_f7o: FILL_WINDOW -tl0_resv100: BTRAPS(0x100) BTRAPS(0x108) -tl0_resv110: BTRAPS(0x110) BTRAPS(0x118) -tl0_resv120: BTRAPS(0x120) BTRAPS(0x128) -tl0_resv130: BTRAPS(0x130) BTRAPS(0x138) -tl0_resv140: BTRAPS(0x140) BTRAPS(0x148) -tl0_resv150: BTRAPS(0x150) BTRAPS(0x158) -tl0_resv160: BTRAPS(0x160) BTRAPS(0x168) -tl0_resv170: BTRAPS(0x170) BTRAPS(0x178) -tl0_resv180: BTRAPS(0x180) BTRAPS(0x188) -tl0_resv190: BTRAPS(0x190) BTRAPS(0x198) -tl0_resv1a0: BTRAPS(0x1a0) BTRAPS(0x1a8) -tl0_resv1b0: BTRAPS(0x1b0) BTRAPS(0x1b8) -tl0_resv1c0: BTRAPS(0x1c0) BTRAPS(0x1c8) -tl0_resv1d0: BTRAPS(0x1d0) BTRAPS(0x1d8) -tl0_resv1e0: BTRAPS(0x1e0) BTRAPS(0x1e8) -tl0_resv1f0: BTRAPS(0x1f0) BTRAPS(0x1f8) - -#undef BTRAPS -#define BTRAPS(x) BTRAPTL1(x) BTRAPTL1(x+1) BTRAPTL1(x+2) BTRAPTL1(x+3) BTRAPTL1(x+4) BTRAPTL1(x+5) BTRAPTL1(x+6) BTRAPTL1(x+7) - -#define SKIP_IRQ(routine, level) \ - retry; nop; nop; nop; nop; nop; nop; nop; - -sparc64_ttable_tl1: - BTRAPS(0x00) BTRAPS(0x08) - BTRAPS(0x10) BTRAPS(0x18) - BTRAPTL1(0x20) BTRAPTL1(0x21) BTRAPTL1(0x22) BTRAPTL1(0x23) - CLEAN_WINDOW ! 24-27 - BTRAPS(0x28) - BTRAPS(0x30) BTRAPS(0x38) - BTRAPTL1(0x40) BTRAPTL1(0x41) BTRAPTL1(0x42) BTRAPTL1(0x43) -tl1_irq4: TRAP_IRQ(handler_irq, 4) -tl1_irq5: TRAP_IRQ(handler_irq, 5) TRAP_IRQ(handler_irq, 6) -tl1_irq7: TRAP_IRQ(handler_irq, 7) TRAP_IRQ(handler_irq, 8) -tl1_irq9: TRAP_IRQ(handler_irq, 9) TRAP_IRQ(handler_irq, 10) -tl1_irq11: TRAP_IRQ(handler_irq, 11) TRAP_IRQ(handler_irq, 12) -tl1_irq13: TRAP_IRQ(handler_irq, 13) -tl1_irq14: SKIP_IRQ(softint_irq, 14) -tl1_irq15: TRAP_IRQ(handler_irq, 15) - BTRAPS(0x50) BTRAPS(0x58) - BTRAPS4(0x60) - TRAP_HANDLER(reload_IMMU_tlb) ! 0x64 : instruction_access_MMU_miss - TRAP_HANDLER(reload_IMMU_tlb) ! 0x65 : instruction_access_MMU_miss - TRAP_HANDLER(reload_IMMU_tlb) ! 0x66 : instruction_access_MMU_miss - TRAP_HANDLER(reload_IMMU_tlb) ! 0x67 : instruction_access_MMU_miss - TRAP_HANDLER(reload_DMMU_tlb) ! 0x68 : data_access_MMU_miss - TRAP_HANDLER(reload_DMMU_tlb) ! 0x69 : data_access_MMU_miss - TRAP_HANDLER(reload_DMMU_tlb) ! 0x6A : data_access_MMU_miss - TRAP_HANDLER(reload_DMMU_tlb) ! 0x6B : data_access_MMU_miss - BTRAPS4(0x6C) ! data_access_protection - BTRAPS(0x70) BTRAPS(0x78) -tl1_s0n: SPILL_WINDOW -tl1_s1n: SPILL_WINDOW -tl1_s2n: SPILL_WINDOW -tl1_s3n: SPILL_WINDOW -tl1_s4n: SPILL_WINDOW -tl1_s5n: SPILL_WINDOW -tl1_s6n: SPILL_WINDOW -tl1_s7n: SPILL_WINDOW -tl1_s0o: SPILL_WINDOW -tl1_s1o: SPILL_WINDOW -tl1_s2o: SPILL_WINDOW -tl1_s3o: SPILL_WINDOW -tl1_s4o: SPILL_WINDOW -tl1_s5o: SPILL_WINDOW -tl1_s6o: SPILL_WINDOW -tl1_s7o: SPILL_WINDOW -tl1_f0n: FILL_WINDOW -tl1_f1n: FILL_WINDOW -tl1_f2n: FILL_WINDOW -tl1_f3n: FILL_WINDOW -tl1_f4n: FILL_WINDOW -tl1_f5n: FILL_WINDOW -tl1_f6n: FILL_WINDOW -tl1_f7n: FILL_WINDOW -tl1_f0o: FILL_WINDOW -tl1_f1o: FILL_WINDOW -tl1_f2o: FILL_WINDOW -tl1_f3o: FILL_WINDOW -tl1_f4o: FILL_WINDOW -tl1_f5o: FILL_WINDOW -tl1_f6o: FILL_WINDOW -tl1_f7o: FILL_WINDOW -tl1_resv100: BTRAPS(0x100) BTRAPS(0x108) -tl1_resv110: BTRAPS(0x110) BTRAPS(0x118) -tl1_resv120: BTRAPS(0x120) BTRAPS(0x128) -tl1_resv130: BTRAPS(0x130) BTRAPS(0x138) -tl1_resv140: BTRAPS(0x140) BTRAPS(0x148) -tl1_resv150: BTRAPS(0x150) BTRAPS(0x158) -tl1_resv160: BTRAPS(0x160) BTRAPS(0x168) -tl1_resv170: BTRAPS(0x170) BTRAPS(0x178) -tl1_resv180: BTRAPS(0x180) BTRAPS(0x188) -tl1_resv190: BTRAPS(0x190) BTRAPS(0x198) -tl1_resv1a0: BTRAPS(0x1a0) BTRAPS(0x1a8) -tl1_resv1b0: BTRAPS(0x1b0) BTRAPS(0x1b8) -tl1_resv1c0: BTRAPS(0x1c0) BTRAPS(0x1c8) -tl1_resv1d0: BTRAPS(0x1d0) BTRAPS(0x1d8) -tl1_resv1e0: BTRAPS(0x1e0) BTRAPS(0x1e8) -tl1_resv1f0: BTRAPS(0x1f0) BTRAPS(0x1f8) - - .section ".data" - .align 8 - .globl obp_ticks_pointer - - - ! Pointer to current tick value -obp_ticks_pointer: - .xword 0 - - .section ".text", "ax" - -spill_32bit: - srl %sp, 0, %sp - stw %l0, [%sp + 0x00] - stw %l1, [%sp + 0x04] - stw %l2, [%sp + 0x08] - stw %l3, [%sp + 0x0c] - stw %l4, [%sp + 0x10] - stw %l5, [%sp + 0x14] - stw %l6, [%sp + 0x18] - stw %l7, [%sp + 0x1c] - stw %i0, [%sp + 0x20] - stw %i1, [%sp + 0x24] - stw %i2, [%sp + 0x28] - stw %i3, [%sp + 0x2c] - stw %i4, [%sp + 0x30] - stw %i5, [%sp + 0x34] - stw %i6, [%sp + 0x38] - stw %i7, [%sp + 0x3c] - saved - retry - -fill_32bit: - srl %sp, 0, %sp - lduw [%sp + 0x00], %l0 - lduw [%sp + 0x04], %l1 - lduw [%sp + 0x08], %l2 - lduw [%sp + 0x0c], %l3 - lduw [%sp + 0x10], %l4 - lduw [%sp + 0x14], %l5 - lduw [%sp + 0x18], %l6 - lduw [%sp + 0x1c], %l7 - lduw [%sp + 0x20], %i0 - lduw [%sp + 0x24], %i1 - lduw [%sp + 0x28], %i2 - lduw [%sp + 0x2c], %i3 - lduw [%sp + 0x30], %i4 - lduw [%sp + 0x34], %i5 - lduw [%sp + 0x38], %i6 - lduw [%sp + 0x3c], %i7 - restored - retry - - - .globl reload_DMMU_tlb, reload_IMMU_tlb, bug - -reload_DMMU_tlb: - - /* Save CPU state to stack */ - setx _fcstack_ptr, %g6, %g7 - ldx [%g7], %g1 - add %g1, -CONTEXT_STATE_SIZE, %g1 - stx %g1, [%g7] - - SAVE_CPU_STATE(dtlb) - - /* Switch to 8K TLB locked OpenBIOS stack (note we add an additional 192 bytes required for - gcc to save its arguments when building with -O0) */ - setx _fcstack_ptr, %g6, %g7 - ldx [%g7], %g6 - setx CONTEXT_STACK_SIZE, %g4, %g5 - sub %g6, %g5, %g6 - stx %g6, [%g7] - - setx - 2047 - 192, %g6, %g7 - add %g1, %g7, %g7 - mov %g7, %sp - - /* Enable interrupts for window spill/fill traps */ - rdpr %pstate, %g7 - or %g7, PSTATE_IE, %g7 - wrpr %g7, %pstate - - call dtlb_miss_handler - nop - - /* Disable interrupts */ - rdpr %pstate, %g7 - andn %g7, PSTATE_IE, %g7 - wrpr %g7, %pstate - - /* Restore CPU state from stack */ - setx _fcstack_ptr, %g6, %g7 - ldx [%g7], %g1 - setx CONTEXT_STACK_SIZE, %g4, %g5 - add %g1, %g5, %g1 - stx %g1, [%g7] - - RESTORE_CPU_STATE(dtlb) - - setx _fcstack_ptr, %g6, %g7 - ldx [%g7], %g1 - add %g1, CONTEXT_STATE_SIZE, %g1 - stx %g1, [%g7] - - retry - -reload_IMMU_tlb: - - /* Save CPU state to stack */ - setx _fcstack_ptr, %g6, %g7 - ldx [%g7], %g1 - add %g1, -CONTEXT_STATE_SIZE, %g1 - stx %g1, [%g7] - - SAVE_CPU_STATE(itlb) - - /* Switch to 8K TLB locked OpenBIOS stack (note we add an additional 192 bytes required for - gcc to save its arguments when building with -O0) */ - setx _fcstack_ptr, %g6, %g7 - ldx [%g7], %g6 - setx CONTEXT_STACK_SIZE, %g4, %g5 - sub %g6, %g5, %g6 - stx %g6, [%g7] - - setx - 2047 - 192, %g6, %g7 - add %g1, %g7, %g7 - mov %g7, %sp - - /* Enable interrupts for window spill/fill traps */ - rdpr %pstate, %g7 - or %g7, PSTATE_IE, %g7 - wrpr %g7, %pstate - - call itlb_miss_handler - nop - - /* Disable interrupts */ - rdpr %pstate, %g7 - andn %g7, PSTATE_IE, %g7 - wrpr %g7, %pstate - - /* Restore CPU state from stack */ - setx _fcstack_ptr, %g6, %g7 - ldx [%g7], %g1 - setx CONTEXT_STACK_SIZE, %g4, %g5 - add %g1, %g5, %g1 - stx %g1, [%g7] - - RESTORE_CPU_STATE(itlb) - - setx _fcstack_ptr, %g6, %g7 - ldx [%g7], %g1 - add %g1, CONTEXT_STATE_SIZE, %g1 - stx %g1, [%g7] - - retry - -softint_irq_tl1: -softint_irq: - mov 1, %g2 - /* clear tick interrupt */ - wr %g2, 0x0, %clear_softint - sll %g2, %g1, %g2 - sra %g2, 0, %g2 - /* clear softint interrupt */ - wr %g2, 0x0, %clear_softint - - setx TICK_INT_DIS, %g2, %g1 - rd %tick, %g2 - and %g1, %g2, %g1 - brnz,pn %g1, tick_compare_disabled - nop - - /* update tick value if pointer set */ - setx obp_ticks_pointer, %g3, %g1 - ldx [%g1], %g3 - brz %g3, tick_rearm - nop - - ldx [%g3], %g1 - add %g1, 10, %g1 ! 100Hz = 10ms - stx %g1, [%g3] - -tick_rearm: - set TICK_INTERVAL, %g1 - add %g1, %g2, %g1 - wr %g1, 0, %tick_cmpr -tick_compare_disabled: - retry - -handler_irq: -__divide_error: -bug: - /* Dump the exception and its context */ - ! Set up CPU state - ! Don't change the global register set or we lose %g1 (exception level) - rdpr %pstate, %g2 - or %g2, PSTATE_PRIV, %g2 - wrpr %g2, %pstate - wr %g0, 0, %fprs - - ! Jump to ROM ... - setx _start, %g2, %g3 - setx highmem, %g2, %g4 - sub %g4, %g3, %g4 - setx PROM_ADDR, %g2, %g3 - add %g4, %g3, %g3 - jmp %g3 - ! ... while disabling I/D MMUs and caches - stxa %g0, [%g0] ASI_LSU_CONTROL - -highmem: - ! Extract NWINDOWS from %ver - rdpr %ver, %g2 - and %g2, 0xf, %g2 - wrpr %g2, 0, %cleanwin - wrpr %g2, 0, %cansave - wrpr %g0, 0, %canrestore - wrpr %g0, 0, %otherwin - wrpr %g0, 0, %wstate - - b dump_exception - nop - -outstr: - /* void outstr (unsigned long port, const unsigned char *str); - * Writes a string on an IO port. - */ -1: ldub [%o1], %o3 - cmp %o3, 0 - be 2f - nop - stba %o3, [%o0] ASI_BP - b 1b - inc %o1 -2: retl - nop - -outdigit: - /* void outdigit (unsigned long port, uint8_t digit); - * Dumps a single digit on serial port. - */ - add %o1, '0', %o1 - retl - stba %o1, [%o0] ASI_BP - -outhex: - /* void outhex (unsigned long port, uint64_t value); - * Dumps a 64 bits hex number on serial port - */ - mov %o1, %o2 - set 60, %o3 - srlx %o2, %o3, %o1 -1: and %o1, 0xf, %o1 - cmp %o1, 9 - bgt 2f - nop - b 3f - add %o1, '0', %o1 -2: add %o1, 'a' - 10, %o1 -3: stba %o1, [%o0] ASI_BP - subcc %o3, 4, %o3 - bge 1b - srlx %o2, %o3, %o1 - retl - nop - - /* void dump_exception (); - * - * Dump a message when catching an exception - */ -dump_exception: - setx SER_ADDR, %o3, %o0 - set _start, %g3 - set (_BUG_message_0), %o1 - sub %o1, %g3, %g4 - setx PROM_ADDR, %g2, %g3 - add %g4, %g3, %g3 - call outstr - mov %g3, %o1 - - call outhex - mov %g1, %o1 - - call outstr - add %g3, (_BUG_message_1 - _BUG_message_0), %o1 - - call outhex - rdpr %tpc, %o1 - - call outstr - add %g3, (_BUG_message_2 - _BUG_message_0), %o1 - - call outhex - rdpr %tnpc, %o1 - - call outstr - add %g3, (_BUG_message_3 - _BUG_message_0), %o1 - -_forever: - /* Loop forever */ - b _forever ; - nop - - .section .rodata -_BUG_message_0: - .string "Unhandled Exception 0x" -_BUG_message_1: - .string "\nPC = 0x" -_BUG_message_2: - .string " NPC = 0x" -_BUG_message_3: - .string "\nStopping execution\n" |