arm: Fix setjmp (again)
authorAlexander Graf <agraf@suse.de>
Tue, 5 Jul 2016 18:37:17 +0000 (20:37 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 8 Jul 2016 21:16:38 +0000 (17:16 -0400)
Commit e677724 (arm: Fix setjmp) added code to fix compilation of the setjmp
code path with thumv1. Unfortunately it missed a constraint that the adr
instruction can only refer to 4 byte aligned offsets.

So this patch adds the required alignment hooks to make compilation
work again even when setjmp doesn't happen to be 4 byte aligned.

Signed-off-by: Alexander Graf <agraf@suse.de>
Tested-by: Tom Rini <trini@konsulko.com>
arch/arm/include/asm/setjmp.h

index ae738b2457ba13634ae9ab7198ec3c11bcc3a630..f7b97efc59d6284281a5ecc2ff19489817395757 100644 (file)
@@ -43,6 +43,7 @@ static inline int setjmp(jmp_buf jmp)
 #else
        asm volatile(
 #ifdef CONFIG_SYS_THUMB_BUILD
+               ".align 2\n"
                "adr r0, jmp_target\n"
                "add r0, r0, $1\n"
 #else
@@ -52,7 +53,8 @@ static inline int setjmp(jmp_buf jmp)
                "mov r2, sp\n"
                "stm r1!, {r0, r2, r4, r5, r6, r7}\n"
                "b 2f\n"
-               "jmp_target: "
+               ".align 2\n"
+               "jmp_target: \n"
                "mov %0, #1\n"
                "2:\n"
                : "+l" (r)