1
0
Fork 0
forked from len0rd/rockbox

hwstub: allow the stub to relocate itself

Change-Id: Iab60c6ec0e8eda19c76c84241f8367d53cb4f87b
This commit is contained in:
Amaury Pouly 2013-08-11 19:17:36 +02:00
parent cb8274373b
commit 0ec1536d64
3 changed files with 25 additions and 1 deletions

View file

@ -3,8 +3,30 @@
.align 0x04 .align 0x04
.global start .global start
start: start:
sub r7, pc, #8 /* Copy running address */
msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */
/* Disable MMU, disable caching and buffering;
* use low exception range address */
mrc p15, 0, r0, c1, c0, 0
ldr r1, =0x3005
bic r0, r1
mcr p15, 0, r0, c1, c0, 0
ldr sp, =oc_stackend ldr sp, =oc_stackend
/* Relocate to right address */
mov r2, r7
ldr r3, =_copystart
ldr r4, =_copyend
1:
cmp r4, r3
ldrhi r5, [r2], #4
strhi r5, [r3], #4
bhi 1b
mov r2, #0
mcr p15, 0, r2, c7, c5, 0 @ Invalidate ICache
/* Jump to real location */
ldr pc, =remap
remap:
/* clear bss */ /* clear bss */
ldr r2, =bss_start ldr r2, =bss_start
ldr r3, =bss_end ldr r3, =bss_end

View file

@ -36,11 +36,13 @@ SECTIONS
{ {
.octext : .octext :
{ {
_copystart = .;
oc_codestart = .; oc_codestart = .;
*(.text*) *(.text*)
*(.icode*) *(.icode*)
*(.data*) *(.data*)
*(.rodata*) *(.rodata*)
_copyend = .;
} > OCRAM } > OCRAM
.bss (NOLOAD) : .bss (NOLOAD) :