Annotation of funnyos/arch/testarm/boot/loader.S, Revision 1.5
1.1 init 1: /*
1.5 ! nbrk 2: * $Id: loader.S,v 1.4 2007/11/05 18:54:35 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.5 ! nbrk 70: /* store sys_mode's cpsr */
! 71: // mrs r1, spsr
! 72: // stmdb sp!, {r1}
! 73:
! 74: /* pass sp (which now contains struct pcb of interrupted task) to irq_trampoline */
! 75: mov r0, sp
! 76:
1.2 init 77: bl irq_trampoline
1.1 init 78:
1.4 init 79: /* load r0-r12 and pc from the stack */
80: /* note ^ that copies SPSR into CPSR */
1.5 ! nbrk 81: /** here we may return to different task (if pcb was changed in the stack memory) **/
1.4 init 82: ldmia sp!, {r0-r12, pc}^
1.3 init 83:
1.1 init 84: _vector_fiq:
85: nop
86:
87: /* last word of the physical memory */
1.3 init 88: Asysstack:
1.1 init 89: .word 0x01fffffc
1.3 init 90: Airqstack:
91: .word 0x01fff000
1.1 init 92:
CVSweb