diff options
| author | Stefan Agner <stefan@agner.ch> | 2019-02-17 18:58:29 -0500 |
|---|---|---|
| committer | Russell King <rmk+kernel@armlinux.org.uk> | 2019-02-26 06:26:08 -0500 |
| commit | b7e8c9397cd4efe6567d2728f091f1b728025533 (patch) | |
| tree | 8d5a0f66390a1c3f22b807928d9c8cf10a973a9c | |
| parent | e44fc38818ed795f4c661d5414c6e0affae0fa63 (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.c | 3 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-v4wb.c | 3 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-v4wt.c | 3 |
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\ |
| 49 | 1: mcr p15, 0, %1, c7, c6, 1 @ 1 invalidate D line\n\ | 50 | 1: 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\ |
| 31 | 1: mcr p15, 0, %0, c7, c6, 1 @ 1 invalidate D line\n\ | 32 | 1: 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\ |
| 29 | 1: stmia %0!, {r3, r4, ip, lr} @ 4\n\ | 30 | 1: 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) |
