aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Agner <stefan@agner.ch>2019-02-17 18:58:29 -0500
committerRussell King <rmk+kernel@armlinux.org.uk>2019-02-26 06:26:08 -0500
commitb7e8c9397cd4efe6567d2728f091f1b728025533 (patch)
tree8d5a0f66390a1c3f22b807928d9c8cf10a973a9c
parente44fc38818ed795f4c661d5414c6e0affae0fa63 (diff)
ARM: 8845/1: use unified assembler in c files
Use unified assembler syntax (UAL) in inline assembler. Divided syntax is considered deprecated. This will also allow to build the kernel using LLVM's integrated assembler. When compiling non-Thumb2 GCC always emits a ".syntax divided" at the beginning of the inline assembly which makes the assembler fail. Since GCC 5 there is the -masm-syntax-unified GCC option which make GCC assume unified syntax asm and hence emits ".syntax unified" even in ARM mode. However, the option is broken since GCC version 6 (see GCC PR88648 [1]). Work around by adding ".syntax unified" as part of the inline assembly. [0] https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#index-masm-syntax-unified [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88648 Signed-off-by: Stefan Agner <stefan@agner.ch> Acked-by: Nicolas Pitre <nico@linaro.org> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-rw-r--r--arch/arm/mm/copypage-v4mc.c3
-rw-r--r--arch/arm/mm/copypage-v4wb.c3
-rw-r--r--arch/arm/mm/copypage-v4wt.c3
3 files changed, 6 insertions, 3 deletions
diff --git a/arch/arm/mm/copypage-v4mc.c b/arch/arm/mm/copypage-v4mc.c
index b03202cddddb..f74cdce6d4da 100644
--- a/arch/arm/mm/copypage-v4mc.c
+++ b/arch/arm/mm/copypage-v4mc.c
@@ -45,6 +45,7 @@ static void mc_copy_user_page(void *from, void *to)
45 int tmp; 45 int tmp;
46 46
47 asm volatile ("\ 47 asm volatile ("\
48 .syntax unified\n\
48 ldmia %0!, {r2, r3, ip, lr} @ 4\n\ 49 ldmia %0!, {r2, r3, ip, lr} @ 4\n\
491: mcr p15, 0, %1, c7, c6, 1 @ 1 invalidate D line\n\ 501: mcr p15, 0, %1, c7, c6, 1 @ 1 invalidate D line\n\
50 stmia %1!, {r2, r3, ip, lr} @ 4\n\ 51 stmia %1!, {r2, r3, ip, lr} @ 4\n\
@@ -56,7 +57,7 @@ static void mc_copy_user_page(void *from, void *to)
56 ldmia %0!, {r2, r3, ip, lr} @ 4\n\ 57 ldmia %0!, {r2, r3, ip, lr} @ 4\n\
57 subs %2, %2, #1 @ 1\n\ 58 subs %2, %2, #1 @ 1\n\
58 stmia %1!, {r2, r3, ip, lr} @ 4\n\ 59 stmia %1!, {r2, r3, ip, lr} @ 4\n\
59 ldmneia %0!, {r2, r3, ip, lr} @ 4\n\ 60 ldmiane %0!, {r2, r3, ip, lr} @ 4\n\
60 bne 1b @ " 61 bne 1b @ "
61 : "+&r" (from), "+&r" (to), "=&r" (tmp) 62 : "+&r" (from), "+&r" (to), "=&r" (tmp)
62 : "2" (PAGE_SIZE / 64) 63 : "2" (PAGE_SIZE / 64)
diff --git a/arch/arm/mm/copypage-v4wb.c b/arch/arm/mm/copypage-v4wb.c
index cd3e165afeed..6d336740aae4 100644
--- a/arch/arm/mm/copypage-v4wb.c
+++ b/arch/arm/mm/copypage-v4wb.c
@@ -27,6 +27,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
27 int tmp; 27 int tmp;
28 28
29 asm volatile ("\ 29 asm volatile ("\
30 .syntax unified\n\
30 ldmia %1!, {r3, r4, ip, lr} @ 4\n\ 31 ldmia %1!, {r3, r4, ip, lr} @ 4\n\
311: mcr p15, 0, %0, c7, c6, 1 @ 1 invalidate D line\n\ 321: mcr p15, 0, %0, c7, c6, 1 @ 1 invalidate D line\n\
32 stmia %0!, {r3, r4, ip, lr} @ 4\n\ 33 stmia %0!, {r3, r4, ip, lr} @ 4\n\
@@ -38,7 +39,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
38 ldmia %1!, {r3, r4, ip, lr} @ 4\n\ 39 ldmia %1!, {r3, r4, ip, lr} @ 4\n\
39 subs %2, %2, #1 @ 1\n\ 40 subs %2, %2, #1 @ 1\n\
40 stmia %0!, {r3, r4, ip, lr} @ 4\n\ 41 stmia %0!, {r3, r4, ip, lr} @ 4\n\
41 ldmneia %1!, {r3, r4, ip, lr} @ 4\n\ 42 ldmiane %1!, {r3, r4, ip, lr} @ 4\n\
42 bne 1b @ 1\n\ 43 bne 1b @ 1\n\
43 mcr p15, 0, %1, c7, c10, 4 @ 1 drain WB" 44 mcr p15, 0, %1, c7, c10, 4 @ 1 drain WB"
44 : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp) 45 : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
diff --git a/arch/arm/mm/copypage-v4wt.c b/arch/arm/mm/copypage-v4wt.c
index 8614572e1296..3851bb396442 100644
--- a/arch/arm/mm/copypage-v4wt.c
+++ b/arch/arm/mm/copypage-v4wt.c
@@ -25,6 +25,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
25 int tmp; 25 int tmp;
26 26
27 asm volatile ("\ 27 asm volatile ("\
28 .syntax unified\n\
28 ldmia %1!, {r3, r4, ip, lr} @ 4\n\ 29 ldmia %1!, {r3, r4, ip, lr} @ 4\n\
291: stmia %0!, {r3, r4, ip, lr} @ 4\n\ 301: stmia %0!, {r3, r4, ip, lr} @ 4\n\
30 ldmia %1!, {r3, r4, ip, lr} @ 4+1\n\ 31 ldmia %1!, {r3, r4, ip, lr} @ 4+1\n\
@@ -34,7 +35,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
34 ldmia %1!, {r3, r4, ip, lr} @ 4\n\ 35 ldmia %1!, {r3, r4, ip, lr} @ 4\n\
35 subs %2, %2, #1 @ 1\n\ 36 subs %2, %2, #1 @ 1\n\
36 stmia %0!, {r3, r4, ip, lr} @ 4\n\ 37 stmia %0!, {r3, r4, ip, lr} @ 4\n\
37 ldmneia %1!, {r3, r4, ip, lr} @ 4\n\ 38 ldmiane %1!, {r3, r4, ip, lr} @ 4\n\
38 bne 1b @ 1\n\ 39 bne 1b @ 1\n\
39 mcr p15, 0, %2, c7, c7, 0 @ flush ID cache" 40 mcr p15, 0, %2, c7, c7, 0 @ flush ID cache"
40 : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp) 41 : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)