Annotation of funnyos/arch/testarm/boot/loader.S, Revision 1.3
1.1 init 1: /*
1.3 ! init 2: * $Id: loader.S,v 1.2 2007/10/29 20:34:23 init Exp $
1.1 init 3: */
4: /*
5: * FunnyOS loader
6: * for gxemul test arm machines.
7: */
8: .text
9: .global _start
10: .global main
11:
12: _start:
1.3 ! init 13: b _vector_reset /* reset */
1.1 init 14: bl _vector_undef /* undefined insn */
15: bl _vector_swi /* software intr handler */
16: bl _vector_dataabrt /* data abort */
17: bl _vector_prefabrt /* prefetch abort */
18: .word 0x00000000 /* [reserved] */
1.3 ! init 19: b _vector_irq /* IRQ */
1.1 init 20: bl _vector_fiq /* Fast Interrupt Request */
21:
22: _vector_reset:
23: /*
1.3 ! init 24: * Will enter here just right after RESET.
! 25: * Set up stack and call main.
! 26: */
1.1 init 27:
1.3 ! init 28: /*
! 29: * Setup an IRQ stack
! 30: */
! 31: /* switch into irq mode with interrupts disabled */
! 32: msr cpsr_c, #(0x12 | 0x80)
! 33:
! 34: /* set sp (sp is banked) */
! 35: ldr sp, Airqstack
! 36:
! 37: /*
! 38: * Setup system stack
! 39: */
! 40: /* switch into system mode (interrupts turned off) */
! 41: msr cpsr_c, #(0x1f | 0x80)
! 42:
! 43: /* set system stack pointer */
! 44: ldr sp, Asysstack
1.1 init 45:
46: b main
47: /* NOTREACHED */
48:
49: _vector_undef:
50: /* Undefined insn handler */
51: mov pc, r14
52:
53: _vector_swi:
54: mov pc, r14
55:
56: _vector_dataabrt:
57: /* XXX fatal */
58: nop
59:
60: _vector_prefabrt:
61: nop
62:
63: _vector_irq:
1.3 ! init 64:
1.2 init 65: bl irq_trampoline
1.1 init 66:
1.3 ! init 67: mrs r0, spsr
! 68: msr cpsr, r0
! 69:
! 70: subs pc, r14, #4
! 71:
1.1 init 72: _vector_fiq:
73: nop
74:
75: /* last word of the physical memory */
1.3 ! init 76: Asysstack:
1.1 init 77: .word 0x01fffffc
1.3 ! init 78: Airqstack:
! 79: .word 0x01fff000
1.1 init 80:
CVSweb