Annotation of funnyos/arch/testarm/boot/loader.S, Revision 1.4
1.1 init 1: /*
1.4 ! init 2: * $Id: loader.S,v 1.3 2007/11/04 22:39:27 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.4 ! init 64: /* decrement pc by one insn */
! 65: sub lr, lr, #4
! 66:
! 67: /* store all system mode registers */
! 68: stmdb sp!, {r0-r12, lr}
1.3 init 69:
1.2 init 70: bl irq_trampoline
1.1 init 71:
1.4 ! init 72: /* load r0-r12 and pc from the stack */
! 73: /* note ^ that copies SPSR into CPSR */
! 74: ldmia sp!, {r0-r12, pc}^
1.3 init 75:
1.1 init 76: _vector_fiq:
77: nop
78:
79: /* last word of the physical memory */
1.3 init 80: Asysstack:
1.1 init 81: .word 0x01fffffc
1.3 init 82: Airqstack:
83: .word 0x01fff000
1.1 init 84:
CVSweb