I doubt the stack_setup() was defective before:
 we load the current location of _start and compare against destination
 of relocate_code(). If we are already there we shoud skip the
 relocation and jump over to clear_bss. Before the clear_bss was also skipped.
Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
        mov     sp, r4
 
        adr     r0, _start
-       cmp     r0, r6
 #ifndef CONFIG_PRELOADER
-       beq     jump_2_ram
+       cmp     r0, r6
+       beq     clear_bss               /* skip relocation */
 #endif
        mov     r1, r6                  /* r1 <- scratch for copy_loop */
        ldr     r2, _TEXT_BASE