c5a1053428
1 OBS-URL: https://build.opensuse.org/request/show/405463 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/u-boot?expand=0&rev=76
56 lines
1.5 KiB
Diff
56 lines
1.5 KiB
Diff
From 5e2cfbf9b14910647eddfaa4da7cfc97a1dcecde Mon Sep 17 00:00:00 2001
|
|
From: Alexander Graf <agraf@suse.de>
|
|
Date: Mon, 13 Jun 2016 13:55:11 +0200
|
|
Subject: [PATCH] arm: Fix setjmp
|
|
|
|
The setjmp/longjmp implementation did not work on thumb1 implementations
|
|
because it used instruction encodings that don't exist on thumb1 yet.
|
|
|
|
This patch limits itself to thumb1 instruction set for 32bit arm and
|
|
removes a superfluous printf along the way.
|
|
|
|
Signed-off-by: Alexander Graf <agraf@suse.de>
|
|
---
|
|
arch/arm/include/asm/setjmp.h | 9 ++++-----
|
|
1 file changed, 4 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/arch/arm/include/asm/setjmp.h b/arch/arm/include/asm/setjmp.h
|
|
index b8b85b7..ae738b2 100644
|
|
--- a/arch/arm/include/asm/setjmp.h
|
|
+++ b/arch/arm/include/asm/setjmp.h
|
|
@@ -43,13 +43,14 @@ static inline int setjmp(jmp_buf jmp)
|
|
#else
|
|
asm volatile(
|
|
#ifdef CONFIG_SYS_THUMB_BUILD
|
|
- "adr r0, jmp_target + 1\n"
|
|
+ "adr r0, jmp_target\n"
|
|
+ "add r0, r0, $1\n"
|
|
#else
|
|
"adr r0, jmp_target\n"
|
|
#endif
|
|
"mov r1, %1\n"
|
|
"mov r2, sp\n"
|
|
- "stm r1, {r0, r2, r4, r5, r6, r7}\n"
|
|
+ "stm r1!, {r0, r2, r4, r5, r6, r7}\n"
|
|
"b 2f\n"
|
|
"jmp_target: "
|
|
"mov %0, #1\n"
|
|
@@ -61,8 +62,6 @@ static inline int setjmp(jmp_buf jmp)
|
|
"cc", "memory");
|
|
#endif
|
|
|
|
-printf("%s:%d target=%#lx\n", __func__, __LINE__, jmp->target);
|
|
-
|
|
return r;
|
|
}
|
|
|
|
@@ -84,7 +83,7 @@ static inline __noreturn void longjmp(jmp_buf jmp)
|
|
#else
|
|
asm volatile(
|
|
"mov r1, %0\n"
|
|
- "ldm r1, {r0, r2, r4, r5, r6, r7}\n"
|
|
+ "ldm r1!, {r0, r2, r4, r5, r6, r7}\n"
|
|
"mov sp, r2\n"
|
|
"bx r0\n"
|
|
:
|