| From dd1f6308b28edf0452dd5dc7877992903ec61e69 Mon Sep 17 00:00:00 2001 |
| From: Vincenzo Frascino <vincenzo.frascino@arm.com> |
| Date: Tue, 18 Feb 2020 16:49:06 +0000 |
| Subject: arm64: lse: Fix LSE atomics with LLVM |
| |
| From: Vincenzo Frascino <vincenzo.frascino@arm.com> |
| |
| commit dd1f6308b28edf0452dd5dc7877992903ec61e69 upstream. |
| |
| Commit e0d5896bd356 ("arm64: lse: fix LSE atomics with LLVM's integrated |
| assembler") broke the build when clang is used in connjunction with the |
| binutils assembler ("-no-integrated-as"). This happens because |
| __LSE_PREAMBLE is defined as ".arch armv8-a+lse", which overrides the |
| version of the CPU architecture passed via the "-march" paramter to gas: |
| |
| $ aarch64-none-linux-gnu-as -EL -I ./arch/arm64/include |
| -I ./arch/arm64/include/generated |
| -I ./include -I ./include |
| -I ./arch/arm64/include/uapi |
| -I ./arch/arm64/include/generated/uapi |
| -I ./include/uapi -I ./include/generated/uapi |
| -I ./init -I ./init |
| -march=armv8.3-a -o init/do_mounts.o |
| /tmp/do_mounts-d7992a.s |
| /tmp/do_mounts-d7992a.s: Assembler messages: |
| /tmp/do_mounts-d7992a.s:1959: Error: selected processor does not support `autiasp' |
| /tmp/do_mounts-d7992a.s:2021: Error: selected processor does not support `paciasp' |
| /tmp/do_mounts-d7992a.s:2157: Error: selected processor does not support `autiasp' |
| /tmp/do_mounts-d7992a.s:2175: Error: selected processor does not support `paciasp' |
| /tmp/do_mounts-d7992a.s:2494: Error: selected processor does not support `autiasp' |
| |
| Fix the issue by replacing ".arch armv8-a+lse" with ".arch_extension lse". |
| Sami confirms that the clang integrated assembler does now support the |
| '.arch_extension' directive, so this change will be fine even for LTO |
| builds in future. |
| |
| Fixes: e0d5896bd356cd ("arm64: lse: fix LSE atomics with LLVM's integrated assembler") |
| Cc: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Will Deacon <will@kernel.org> |
| Reported-by: Amit Kachhap <Amit.Kachhap@arm.com> |
| Tested-by: Sami Tolvanen <samitolvanen@google.com> |
| Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com> |
| Signed-off-by: Will Deacon <will@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/arm64/include/asm/lse.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/arm64/include/asm/lse.h |
| +++ b/arch/arm64/include/asm/lse.h |
| @@ -6,7 +6,7 @@ |
| |
| #if defined(CONFIG_AS_LSE) && defined(CONFIG_ARM64_LSE_ATOMICS) |
| |
| -#define __LSE_PREAMBLE ".arch armv8-a+lse\n" |
| +#define __LSE_PREAMBLE ".arch_extension lse\n" |
| |
| #include <linux/compiler_types.h> |
| #include <linux/export.h> |