Hi, On 2020/8/6 2:19, Sami Tolvanen wrote: > Commit 7c78f67e9bd9 ("arm64: enable tlbi range instructions") breaks > LLVM's integrated assembler, because -Wa,-march is only passed to > external assemblers and therefore, the new instructions are not enabled > when IAS is used. >
I have looked through the discussion on Github issues. The best way to solve this problem is try to pass the "-Wa,-march" parameter to clang even when IAS is enabled, which may need the cooperation of compilation tool chains :( Currently, I think we can solve the problem by passing the '-march=armv8.4-a' when using the integrated assembler, just like: diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index 55bc8546d9c7..e5ce184e98c2 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -91,8 +91,12 @@ KBUILD_CFLAGS += $(branch-prot-flags-y) ifeq ($(CONFIG_AS_HAS_ARMV8_4), y) # make sure to pass the newest target architecture to -march. +ifneq ($(LLVM),) +KBUILD_CFLAGS += -march=armv8.4-a +else KBUILD_CFLAGS += -Wa,-march=armv8.4-a endif +endif ifeq ($(CONFIG_SHADOW_CALL_STACK), y) No need to worry about that this might generate instructions that are not supported on older hardware, because the 'TLB range' feature is only enabled when the hardware support ARMv8.4. > As binutils doesn't support .arch_extension tlb-rmi, this change adds > .arch armv8.4-a to __TLBI_0 and __TLBI_1 to fix the issue with both LLVM > IAS and binutils. > > Fixes: 7c78f67e9bd9 ("arm64: enable tlbi range instructions") > Link: https://github.com/ClangBuiltLinux/linux/issues/1106 > Signed-off-by: Sami Tolvanen <samitolva...@google.com> Thanks, Zhenyu