The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH v2] x86/retpoline: Add clang support
@ 2018-02-07 21:52 Guenter Roeck
  2018-02-07 22:28 ` David Woodhouse
  0 siblings, 1 reply; 9+ messages in thread
From: Guenter Roeck @ 2018-02-07 21:52 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: x86, linux-kernel, Guenter Roeck, David Woodhouse, Ingo Molnar,
	gnomes, Rik van Riel, Andi Kleen, Josh Poimboeuf, thomas.lendacky,
	Peter Zijlstra, Linus Torvalds, Jiri Kosina, Andy Lutomirski,
	Dave Hansen, Kees Cook, Tim Chen, Greg Kroah-Hartman, Paul Turner

clang has its own set of compiler options for retpoline support.

Link: https://github.com/llvm-mirror/clang/commit/0d816739a82da29748caf88570affb9715e18b69
Link: https://github.com/llvm-mirror/llvm/commit/fd5a8723ce9f2a6b250e85972ef859e4253ea95d
Link: https://github.com/llvm-mirror/llvm/commit/59b64490fda69d29bb42cfdf7eec37bcc31ff833
Cc: David Woodhouse <dwmw@amazon.co.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: gnomes@lxorguk.ukuu.org.uk
Cc: Rik van Riel <riel@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: thomas.lendacky@amd.com
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Kees Cook <keescook@google.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
Cc: Paul Turner <pjt@google.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
v2: llvm has been updated to use the same thunk names as gcc.
    Tested with:
    clang version 7.0.0
	(https://git.llvm.org/git/clang.git/
		848874aed95a913fb45f363120500cebfe54e2ef)
	(https://git.llvm.org/git/llvm.git/
		3afd566557f3616881505db0d69f5d19bf55ae14)
    cross-checked with gcc 7.3.0 (x86_64-linux-gcc.br_real (Buildroot
    2018.02-rc1) 7.3.0).

Tested with 64-bit builds only; 32-bit images fail to build with clang
with various unrelated errors and are difficult to test.

I had to change '+=' to '=' below since make otherwise sets
RETPOLINE_CFLAGS to " ", and the subsequent ifneq would always match.
This is also the reason for the "ifeq ($(RETPOLINE_CFLAGS),)".
If there is another/different/better way to handle this, please let
me know.

There are curently lots of warnings when building an image with clang.

./include/linux/init.h:134:6: warning:
	unknown attribute 'indirect_branch' ignored

I was inclined to add "&& !defined(__clang__)" to the condition for the
__noretpoline define to fix the problem, but concluded that this should
be a separate patch unless it can be addressed in clang.

 arch/x86/Makefile | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index fad55160dcb9..c1a35cea88e1 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -232,7 +232,12 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
 
 # Avoid indirect branches in kernel to deal with Spectre
 ifdef CONFIG_RETPOLINE
-    RETPOLINE_CFLAGS += $(call cc-option,-mindirect-branch=thunk-extern -mindirect-branch-register)
+    # gcc
+    RETPOLINE_CFLAGS = $(call cc-option,-mindirect-branch=thunk-extern -mindirect-branch-register)
+    ifeq ($(RETPOLINE_CFLAGS),)
+	# clang
+	RETPOLINE_CFLAGS = $(call cc-option,-mretpoline-external-thunk)
+    endif
     ifneq ($(RETPOLINE_CFLAGS),)
         KBUILD_CFLAGS += $(RETPOLINE_CFLAGS) -DRETPOLINE
     endif
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2018-02-14 16:09 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-07 21:52 [PATCH v2] x86/retpoline: Add clang support Guenter Roeck
2018-02-07 22:28 ` David Woodhouse
2018-02-07 23:28   ` Guenter Roeck
2018-02-07 23:32   ` Guenter Roeck
2018-02-13 23:41     ` Guenter Roeck
2018-02-14  0:10       ` David Woodhouse
2018-02-14  2:18         ` Guenter Roeck
2018-02-14 13:09           ` David Woodhouse
2018-02-14 16:09             ` Guenter Roeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox