summaryrefslogtreecommitdiff
path: root/utils/hwstub/stub/crt0.S
diff options
context:
space:
mode:
Diffstat (limited to 'utils/hwstub/stub/crt0.S')
-rw-r--r--utils/hwstub/stub/crt0.S22
1 files changed, 22 insertions, 0 deletions
diff --git a/utils/hwstub/stub/crt0.S b/utils/hwstub/stub/crt0.S
index e2d4742d36..5ba71905c9 100644
--- a/utils/hwstub/stub/crt0.S
+++ b/utils/hwstub/stub/crt0.S
@@ -3,8 +3,30 @@
3.align 0x04 3.align 0x04
4.global start 4.global start
5start: 5start:
6 sub r7, pc, #8 /* Copy running address */
6 msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ 7 msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */
8 /* Disable MMU, disable caching and buffering;
9 * use low exception range address */
10 mrc p15, 0, r0, c1, c0, 0
11 ldr r1, =0x3005
12 bic r0, r1
13 mcr p15, 0, r0, c1, c0, 0
7 ldr sp, =oc_stackend 14 ldr sp, =oc_stackend
15 /* Relocate to right address */
16 mov r2, r7
17 ldr r3, =_copystart
18 ldr r4, =_copyend
191:
20 cmp r4, r3
21 ldrhi r5, [r2], #4
22 strhi r5, [r3], #4
23 bhi 1b
24
25 mov r2, #0
26 mcr p15, 0, r2, c7, c5, 0 @ Invalidate ICache
27 /* Jump to real location */
28 ldr pc, =remap
29remap:
8 /* clear bss */ 30 /* clear bss */
9 ldr r2, =bss_start 31 ldr r2, =bss_start
10 ldr r3, =bss_end 32 ldr r3, =bss_end