diff --git a/arch/arm/cpu/setupc.S b/arch/arm/cpu/setupc.S index 717500c..a5f311b 100644 --- a/arch/arm/cpu/setupc.S +++ b/arch/arm/cpu/setupc.S @@ -15,13 +15,13 @@ push {r4, r5} mov r5, lr bl get_runtime_offset - adds r4, r0, #0 + subs r4, r0, #0 beq 1f /* skip memcpy if already at correct address */ ldr r0,=_text ldr r2,=__bss_start sub r2, r2, r0 - sub r1, r0, r4 - bl memcpy /* memcpy(_text, _text - offset, __bss_start - _text) */ + add r1, r0, r4 + bl memcpy /* memcpy(_text, _text + offset, __bss_start - _text) */ 1: ldr r0, =__bss_start mov r1, #0 ldr r2, =__bss_stop @@ -32,7 +32,7 @@ #endif mov r0, #0 mcr p15, 0, r0, c7, c5, 0 /* flush icache */ - add lr, r5, r4 /* adjust return address to new location */ + sub lr, r5, r4 /* adjust return address to new location */ pop {r4, r5} mov pc, lr ENDPROC(setup_c)