]> git.baikalelectronics.ru Git - kernel.git/commit
ARM: 9151/1: Thumb2: avoid __builtin_thread_pointer() on Clang
authorArd Biesheuvel <ardb@kernel.org>
Fri, 29 Oct 2021 16:49:37 +0000 (17:49 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Sat, 30 Oct 2021 10:24:37 +0000 (11:24 +0100)
commitb359c3a29e2d31d1b805d11a51a75bb813f699e2
tree4fc038347e172360bf7ab4be79ce8d28da891ccc
parent70ea9c01eae4cacf37899917cd29a02b1eaa4986
ARM: 9151/1: Thumb2: avoid __builtin_thread_pointer() on Clang

If available, we use the __builtin_thread_pointer() helper to get the
value of the TLS register, to help the compiler understand that it
doesn't need to reload it every time we access 'current'.

Unfortunately, Clang fails to emit the MRC system register read
directly when building for Thumb2, and instead, it issues a call to the
__aeabi_read_tp helper, which the kernel does not provide, and so this
result in link failures at build time.

So create a special case for this, and emit the MRC directly using an
asm() block, just like we do when the helper is not available to begin
with.

Link: https://github.com/ClangBuiltLinux/linux/issues/1485
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/include/asm/current.h