arm64: Kconfig: verify binutils support for ARM64_PTR_AUTH
authorNick Desaulniers <ndesaulniers@google.com>
Thu, 19 Mar 2020 18:19:51 +0000 (11:19 -0700)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 20 Mar 2020 15:01:04 +0000 (15:01 +0000)
Clang relies on GNU as from binutils to assemble the Linux kernel,
currently. A recent patch to enable the armv8.3-a extension for pointer
authentication checked for compiler support of the relevant flags.
Everything works with binutils 2.34+, but for older versions we observe
assembler errors:

/tmp/vgettimeofday-36a54b.s: Assembler messages:
/tmp/vgettimeofday-36a54b.s:40: Error: unknown pseudo-op: `.cfi_negate_ra_state'

When compiling with Clang, require the assembler to support
.cfi_negate_ra_state directives, in order to support CONFIG_ARM64_PTR_AUTH.

Link: https://github.com/ClangBuiltLinux/linux/issues/938
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
Tested-by: Nathan Chancellor <natechancellor@gmail.com>
arch/arm64/Kconfig

index 155041a..c876afc 100644 (file)
@@ -1500,6 +1500,7 @@ config ARM64_PTR_AUTH
        default y
        depends on !KVM || ARM64_VHE
        depends on (CC_HAS_SIGN_RETURN_ADDRESS || CC_HAS_BRANCH_PROT_PAC_RET) && AS_HAS_PAC
+       depends on CC_IS_GCC || (CC_IS_CLANG && AS_HAS_CFI_NEGATE_RA_STATE)
        depends on (!FUNCTION_GRAPH_TRACER || DYNAMIC_FTRACE_WITH_REGS)
        help
          Pointer authentication (part of the ARMv8.3 Extensions) provides
@@ -1544,6 +1545,9 @@ config CC_HAS_SIGN_RETURN_ADDRESS
 config AS_HAS_PAC
        def_bool $(as-option,-Wa$(comma)-march=armv8.3-a)
 
+config AS_HAS_CFI_NEGATE_RA_STATE
+       def_bool $(as-instr,.cfi_startproc\n.cfi_negate_ra_state\n.cfi_endproc\n)
+
 endmenu
 
 menu "ARMv8.5 architectural features"