mirror of https://github.com/rusefi/ChibiOS.git
219 lines
9.5 KiB
Plaintext
219 lines
9.5 KiB
Plaintext
|
GAS LISTING /cygdrive/c/DOCUME~1/Giovanni/IMPOST~1/Temp/ccgRWKd6.s page 1
|
|||
|
|
|||
|
|
|||
|
1 # 1 "../../os/ports/GCC/ARM7/crt0.s"
|
|||
|
2 # 1 "<built-in>"
|
|||
|
1 /*
|
|||
|
0
|
|||
|
0
|
|||
|
2 ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
|
|||
|
3
|
|||
|
4 This file is part of ChibiOS/RT.
|
|||
|
5
|
|||
|
6 ChibiOS/RT is free software; you can redistribute it and/or modify
|
|||
|
7 it under the terms of the GNU General Public License as published by
|
|||
|
8 the Free Software Foundation; either version 3 of the License, or
|
|||
|
9 (at your option) any later version.
|
|||
|
10
|
|||
|
11 ChibiOS/RT is distributed in the hope that it will be useful,
|
|||
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
|
14 GNU General Public License for more details.
|
|||
|
15
|
|||
|
16 You should have received a copy of the GNU General Public License
|
|||
|
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
18 */
|
|||
|
19
|
|||
|
20 /**
|
|||
|
21 * @file ports/ARM7/crt0.s
|
|||
|
22 * @brief Generic ARM7 startup file for ChibiOS/RT.
|
|||
|
23 * @addtogroup ARM7_CORE
|
|||
|
24 * @{
|
|||
|
25 */
|
|||
|
26 /** @cond never */
|
|||
|
27
|
|||
|
28 .set MODE_USR, 0x10
|
|||
|
29 .set MODE_FIQ, 0x11
|
|||
|
30 .set MODE_IRQ, 0x12
|
|||
|
31 .set MODE_SVC, 0x13
|
|||
|
32 .set MODE_ABT, 0x17
|
|||
|
33 .set MODE_UND, 0x1B
|
|||
|
34 .set MODE_SYS, 0x1F
|
|||
|
35
|
|||
|
36 .equ I_BIT, 0x80
|
|||
|
37 .equ F_BIT, 0x40
|
|||
|
38
|
|||
|
39 .text
|
|||
|
40 .code 32
|
|||
|
41 .balign 4
|
|||
|
42
|
|||
|
43 /*
|
|||
|
44 * Reset handler.
|
|||
|
45 */
|
|||
|
46 .global ResetHandler
|
|||
|
47 ResetHandler:
|
|||
|
48 /*
|
|||
|
49 * Stack pointers initialization.
|
|||
|
50 */
|
|||
|
51 ldr r0, =__ram_end__
|
|||
|
52 /* Undefined */
|
|||
|
53 msr CPSR_c, #MODE_UND | I_BIT | F_BIT
|
|||
|
GAS LISTING /cygdrive/c/DOCUME~1/Giovanni/IMPOST~1/Temp/ccgRWKd6.s page 2
|
|||
|
|
|||
|
|
|||
|
54 ???? 1040 0000 mov sp, r0
|
|||
|
55 ldr r1, =__und_stack_size__
|
|||
|
56 ???? 0080 sub r0, r0, r1
|
|||
|
57 /* Abort */
|
|||
|
58 msr CPSR_c, #MODE_ABT | I_BIT | F_BIT
|
|||
|
59 ???? 1040 0000 mov sp, r0
|
|||
|
60 ldr r1, =__abt_stack_size__
|
|||
|
61 ???? 0080 sub r0, r0, r1
|
|||
|
62 /* FIQ */
|
|||
|
63 msr CPSR_c, #MODE_FIQ | I_BIT | F_BIT
|
|||
|
64 ???? 1040 0000 mov sp, r0
|
|||
|
65 ldr r1, =__fiq_stack_size__
|
|||
|
66 ???? 0080 sub r0, r0, r1
|
|||
|
67 /* IRQ */
|
|||
|
68 msr CPSR_c, #MODE_IRQ | I_BIT | F_BIT
|
|||
|
69 ???? 1040 0000 mov sp, r0
|
|||
|
70 ldr r1, =__irq_stack_size__
|
|||
|
71 ???? 0080 sub r0, r0, r1
|
|||
|
72 /* Supervisor */
|
|||
|
73 msr CPSR_c, #MODE_SVC | I_BIT | F_BIT
|
|||
|
74 ???? 1040 0000 mov sp, r0
|
|||
|
75 ldr r1, =__svc_stack_size__
|
|||
|
76 ???? 0080 sub r0, r0, r1
|
|||
|
77 /* System */
|
|||
|
78 msr CPSR_c, #MODE_SYS | I_BIT | F_BIT
|
|||
|
79 ???? 1040 0000 mov sp, r0
|
|||
|
80 // ldr r1, =__sys_stack_size__
|
|||
|
81 // sub r0, r0, r1
|
|||
|
82 /*
|
|||
|
83 * Early initialization.
|
|||
|
84 */
|
|||
|
85 #ifndef THUMB_NO_INTERWORKING
|
|||
|
86 bl hwinit0
|
|||
|
87 #else
|
|||
|
88 add r0, pc, #1
|
|||
|
89 bx r0
|
|||
|
90 .code 16
|
|||
|
91 bl hwinit0
|
|||
|
92 mov r0, pc
|
|||
|
93 bx r0
|
|||
|
94 .code 32
|
|||
|
95 #endif
|
|||
|
96 /*
|
|||
|
97 * Data initialization.
|
|||
|
98 * NOTE: It assumes that the DATA size is a multiple of 4.
|
|||
|
99 */
|
|||
|
100 ldr r1, =_textdata
|
|||
|
101 ldr r2, =_data
|
|||
|
102 ldr r3, =_edata
|
|||
|
103 dataloop:
|
|||
|
104 ???? 0392 cmp r2, r3
|
|||
|
105 ldrlo r0, [r1], #4
|
|||
|
106 strlo r0, [r2], #4
|
|||
|
107 blo dataloop
|
|||
|
108 /*
|
|||
|
109 * BSS initialization.
|
|||
|
110 * NOTE: It assumes that the BSS size is a multiple of 4.
|
|||
|
GAS LISTING /cygdrive/c/DOCUME~1/Giovanni/IMPOST~1/Temp/ccgRWKd6.s page 3
|
|||
|
|
|||
|
|
|||
|
111 */
|
|||
|
112 ???? 0340 mov r0, #0
|
|||
|
113 ldr r1, =_bss_start
|
|||
|
114 ldr r2, =_bss_end
|
|||
|
115 bssloop:
|
|||
|
116 ???? 0291 cmp r1, r2
|
|||
|
117 strlo r0, [r1], #4
|
|||
|
118 blo bssloop
|
|||
|
119 /*
|
|||
|
120 * Late initialization.
|
|||
|
121 */
|
|||
|
122 #ifdef THUMB_NO_INTERWORKING
|
|||
|
123 add r0, pc, #1
|
|||
|
124 bx r0
|
|||
|
125 .code 16
|
|||
|
126 bl hwinit1
|
|||
|
127 mov r0, #0
|
|||
|
128 mov r1, r0
|
|||
|
129 bl main
|
|||
|
130 ldr r1, =MainExitHandler
|
|||
|
131 bx r1
|
|||
|
132 .code 32
|
|||
|
133 #else
|
|||
|
134 bl hwinit1
|
|||
|
135 ???? 0340 mov r0, #0
|
|||
|
136 ???? 0041 mov r1, r0
|
|||
|
137 bl main
|
|||
|
138 b MainExitHandler
|
|||
|
139 #endif
|
|||
|
140
|
|||
|
141 /*
|
|||
|
142 * Default main function exit handler.
|
|||
|
143 */
|
|||
|
144 .weak MainExitHandler
|
|||
|
145 .globl MainExitHandler
|
|||
|
146 MainExitHandler:
|
|||
|
147
|
|||
|
148 .loop: b .loop
|
|||
|
149
|
|||
|
150 /*
|
|||
|
151 * Default early initialization code. It is declared weak in order to be
|
|||
|
152 * replaced by the real initialization code.
|
|||
|
153 * Early initialization is performed just after reset before BSS and DATA
|
|||
|
154 * segments initialization.
|
|||
|
155 */
|
|||
|
156 #ifdef THUMB_NO_INTERWORKING
|
|||
|
157 .thumb_func
|
|||
|
158 .code 16
|
|||
|
159 #endif
|
|||
|
160 .weak hwinit0
|
|||
|
161 hwinit0:
|
|||
|
162 bx lr
|
|||
|
163 .code 32
|
|||
|
164
|
|||
|
165 /*
|
|||
|
166 * Default late initialization code. It is declared weak in order to be
|
|||
|
167 * replaced by the real initialization code.
|
|||
|
GAS LISTING /cygdrive/c/DOCUME~1/Giovanni/IMPOST~1/Temp/ccgRWKd6.s page 4
|
|||
|
|
|||
|
|
|||
|
168 * Late initialization is performed after BSS and DATA segments initialization
|
|||
|
169 * and before invoking the main() function.
|
|||
|
170 */
|
|||
|
171 #ifdef THUMB_NO_INTERWORKING
|
|||
|
172 .thumb_func
|
|||
|
173 .code 16
|
|||
|
174 #endif
|
|||
|
175 .weak hwinit1
|
|||
|
176 hwinit1:
|
|||
|
177 bx lr
|
|||
|
178 .code 32
|
|||
|
GAS LISTING /cygdrive/c/DOCUME~1/Giovanni/IMPOST~1/Temp/ccgRWKd6.s page 5
|
|||
|
|
|||
|
|
|||
|
DEFINED SYMBOLS
|
|||
|
*ABS*:00000000 ../../os/ports/GCC/ARM7/crt0.s
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:28 *ABS*:00000010 MODE_USR
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:29 *ABS*:00000011 MODE_FIQ
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:30 *ABS*:00000012 MODE_IRQ
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:31 *ABS*:00000013 MODE_SVC
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:32 *ABS*:00000017 MODE_ABT
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:33 *ABS*:0000001b MODE_UND
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:34 *ABS*:0000001f MODE_SYS
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:36 *ABS*:00000080 I_BIT
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:37 *ABS*:00000040 F_BIT
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:47 .text:00000000 ResetHandler
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:103 .text:00000000 dataloop
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:115 .text:00000000 bssloop
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:146 .text:00000000 MainExitHandler
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:148 .text:00000000 .loop
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:161 .text:00000000 hwinit0
|
|||
|
../../os/ports/GCC/ARM7/crt0.s:176 .text:00000000 hwinit1
|
|||
|
|
|||
|
UNDEFINED SYMBOLS
|
|||
|
sp
|