Skip to content

Commit b7e8c93

Browse files
agnersRussell King
authored andcommitted
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>
1 parent e44fc38 commit b7e8c93

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

arch/arm/mm/copypage-v4mc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ static void mc_copy_user_page(void *from, void *to)
4545
int tmp;
4646

4747
asm volatile ("\
48+
.syntax unified\n\
4849
ldmia %0!, {r2, r3, ip, lr} @ 4\n\
4950
1: mcr p15, 0, %1, c7, c6, 1 @ 1 invalidate D line\n\
5051
stmia %1!, {r2, r3, ip, lr} @ 4\n\
@@ -56,7 +57,7 @@ static void mc_copy_user_page(void *from, void *to)
5657
ldmia %0!, {r2, r3, ip, lr} @ 4\n\
5758
subs %2, %2, #1 @ 1\n\
5859
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\
6061
bne 1b @ "
6162
: "+&r" (from), "+&r" (to), "=&r" (tmp)
6263
: "2" (PAGE_SIZE / 64)

arch/arm/mm/copypage-v4wb.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
2727
int tmp;
2828

2929
asm volatile ("\
30+
.syntax unified\n\
3031
ldmia %1!, {r3, r4, ip, lr} @ 4\n\
3132
1: mcr p15, 0, %0, c7, c6, 1 @ 1 invalidate D line\n\
3233
stmia %0!, {r3, r4, ip, lr} @ 4\n\
@@ -38,7 +39,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
3839
ldmia %1!, {r3, r4, ip, lr} @ 4\n\
3940
subs %2, %2, #1 @ 1\n\
4041
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\
4243
bne 1b @ 1\n\
4344
mcr p15, 0, %1, c7, c10, 4 @ 1 drain WB"
4445
: "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)

arch/arm/mm/copypage-v4wt.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
2525
int tmp;
2626

2727
asm volatile ("\
28+
.syntax unified\n\
2829
ldmia %1!, {r3, r4, ip, lr} @ 4\n\
2930
1: stmia %0!, {r3, r4, ip, lr} @ 4\n\
3031
ldmia %1!, {r3, r4, ip, lr} @ 4+1\n\
@@ -34,7 +35,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
3435
ldmia %1!, {r3, r4, ip, lr} @ 4\n\
3536
subs %2, %2, #1 @ 1\n\
3637
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\
3839
bne 1b @ 1\n\
3940
mcr p15, 0, %2, c7, c7, 0 @ flush ID cache"
4041
: "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)

0 commit comments

Comments
 (0)