ARM: decompressor: split off _edata and stack base into separate object
authorArd Biesheuvel <ardb@kernel.org>
Mon, 13 Apr 2020 16:21:32 +0000 (18:21 +0200)
committerArd Biesheuvel <ardb@kernel.org>
Tue, 19 May 2020 16:23:22 +0000 (18:23 +0200)
In preparation of moving the handling of the LC0 object to a later stage
in the decompressor startup code, move out _edata and the initial value
of the stack pointer, which are needed earlier than the remaining
contents of LC0.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
arch/arm/boot/compressed/head.S

index 42b8d67..5d712e2 100644 (file)
@@ -293,22 +293,20 @@ not_angel:
                orrcc   r4, r4, #1              @ remember we skipped cache_on
                blcs    cache_on
 
-restart:       adr     r0, LC0
-               ldmia   r0, {r1, r2, r3, r6, r11, r12}
-               ldr     sp, [r0, #24]
+restart:       adr     r0, LC1
+               ldr     sp, [r0]
+               ldr     r6, [r0, #4]
+               add     sp, sp, r0
+               add     r6, r6, r0
 
-               /*
-                * We might be running at a different address.  We need
-                * to fix up various pointers.
-                */
+               adr     r0, LC0
+               ldmia   r0, {r1, r2, r3, r11, r12}
                sub     r0, r0, r1              @ calculate the delta offset
-               add     r6, r6, r0              @ _edata
 
                get_inflated_image_size r9, r10, lr
 
 #ifndef CONFIG_ZBOOT_ROM
                /* malloc space is above the relocated stack (64k max) */
-               add     sp, sp, r0
                add     r10, sp, #0x10000
 #else
                /*
@@ -660,12 +658,15 @@ not_relocated:    mov     r0, #0
 LC0:           .word   LC0                     @ r1
                .word   __bss_start             @ r2
                .word   _end                    @ r3
-               .word   _edata                  @ r6
                .word   _got_start              @ r11
                .word   _got_end                @ ip
-               .word   .L_user_stack_end       @ sp
                .size   LC0, . - LC0
 
+               .type   LC1, #object
+LC1:           .word   .L_user_stack_end - LC1 @ sp
+               .word   _edata - LC1            @ r6
+               .size   LC1, . - LC1
+
 .Lheadroom:
                .word   _end - restart + 16384 + 1024*1024