]> git.pld-linux.org Git - packages/crossarm-gcc.git/blob - crossarm-lpc210x-crt0.s
up to 13.2.0
[packages/crossarm-gcc.git] / crossarm-lpc210x-crt0.s
1
2                 .set    SYSTEM_MODE,            0x1F
3                 .set    UNDEFINED_MODE,         0x1B
4                 .set    ABORT_MODE,             0x17
5                 .set    SUPERVISOR_MODE,        0x13
6                 .set    IRQ_MODE,               0x12
7                 .set    FIQ_MODE,               0x11
8                 .set    USER_MODE,              0x10
9
10                 .text
11                 .arm
12                 .org    0
13                 .align  0
14
15 # exception vectors
16
17                 b       reset_handler
18                 ldr     pc, undefined_instruction_handler_addr
19                 ldr     pc, software_interrupt_handler_addr
20                 ldr     pc, prefetch_abort_handler_addr
21                 ldr     pc, data_abort_handler_addr
22                 ldr     pc, endless_loop        /* ARM-reserved vector */
23                 ldr     pc, irq_handler_addr
24                 ldr     pc, fiq_handler_addr
25
26 undefined_instruction_handler_addr:     .long   undefined_instruction_handler
27 software_interrupt_handler_addr:        .long   software_interrupt_handler
28 prefetch_abort_handler_addr:            .long   prefetch_abort_handler
29 data_abort_handler_addr:                .long   data_abort_handler
30 irq_handler_addr:                       .long   irq_handler
31 fiq_handler_addr:                       .long   fiq_handler
32
33 .global reset_handler
34 reset_handler:
35
36                 msr     cpsr_c, #UNDEFINED_MODE
37                 ldr     sp, =__UNDEFINED_SP__
38                 msr     cpsr_c, #ABORT_MODE
39                 ldr     sp, =__ABORT_SP__
40                 msr     cpsr_c, #IRQ_MODE
41                 ldr     sp, =__IRQ_SP__
42                 msr     cpsr_c, #FIQ_MODE
43                 ldr     sp, =__FIQ_SP__
44                 msr     cpsr_c, #SUPERVISOR_MODE
45                 ldr     sp, =__SUPERVISOR_SP__
46
47 # setup a default stack limit (when compiled with "-mapcs-stack-check").
48 #               sub     sl, sp, #__USER_STACK_SIZE__
49
50 # relocate .data(rw) section (copy from FLASH to RAM).
51
52                 ldr     r1, =__text_end__
53                 ldr     r2, =__data_start__
54                 ldr     r3, =__data_end__
55
56 reset_handler_L01:
57
58                 cmp     r2, r3
59                 ldrlo   r0, [r1], #4
60                 strlo   r0, [r2], #4
61                 blo     reset_handler_L01
62
63 # clear .bss(rw) section.
64
65                 mov     r0, #0
66                 ldr     r1, =__bss_start__
67                 ldr     r2, =__bss_end__
68
69 reset_handler_L02:
70
71                 cmp     r1, r2
72                 strlo   r0, [r1], #4
73                 blo     reset_handler_L02
74
75 # set up arguments to main() and call.
76
77                 mov     r0, #0
78                 mov     r1, #0
79                 bl      main
80
81 .global endless_loop
82 endless_loop:
83                 b       endless_loop
84
85                 .end
This page took 0.074605 seconds and 3 git commands to generate.