[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v8 01/17] x86: Support compiling with indirect branch thunks
Use -mindirect-branch=thunk-extern/-mindirect-branch-register when available. To begin with, use the retpoline thunk. Later work will add alternative thunks which can be selected at boot time. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- v7: * Alter thunk symbols to match the latested GCC changes proposed upstream. * Rename indirect_thunk.S to indirect-thunk.S * Use a single parameter now that we don't need to split reg and name. * Sort registers by encoding. v8: * Add a header comment and .file directive for indirect-thunk.S --- xen/arch/x86/Makefile | 1 + xen/arch/x86/Rules.mk | 7 +++++++ xen/arch/x86/indirect-thunk.S | 38 ++++++++++++++++++++++++++++++++++++++ xen/arch/x86/xen.lds.S | 1 + 4 files changed, 47 insertions(+) create mode 100644 xen/arch/x86/indirect-thunk.S diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile index d5d58a2..b334366 100644 --- a/xen/arch/x86/Makefile +++ b/xen/arch/x86/Makefile @@ -36,6 +36,7 @@ obj-y += io_apic.o obj-$(CONFIG_LIVEPATCH) += alternative.o livepatch.o obj-y += msi.o obj-y += msr.o +obj-$(CONFIG_INDIRECT_THUNK) += indirect-thunk.o obj-y += ioport_emulate.o obj-y += irq.o obj-$(CONFIG_KEXEC) += machine_kexec.o diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk index 568657e..abcc4d4 100644 --- a/xen/arch/x86/Rules.mk +++ b/xen/arch/x86/Rules.mk @@ -30,3 +30,10 @@ CFLAGS += -fno-asynchronous-unwind-tables ifneq ($(call cc-option,$(CC),-fvisibility=hidden,n),n) CFLAGS += -DGCC_HAS_VISIBILITY_ATTRIBUTE endif + +# Compile with thunk-extern, indirect-branch-register if avaiable. +ifneq ($(call cc-option,$(CC),-mindirect-branch-register,n),n) +CFLAGS += -mindirect-branch=thunk-extern -mindirect-branch-register +CFLAGS += -DCONFIG_INDIRECT_THUNK +export CONFIG_INDIRECT_THUNK=y +endif diff --git a/xen/arch/x86/indirect-thunk.S b/xen/arch/x86/indirect-thunk.S new file mode 100644 index 0000000..3eaf505 --- /dev/null +++ b/xen/arch/x86/indirect-thunk.S @@ -0,0 +1,38 @@ +/* + * Implement __x86_indirect_thunk_* symbols for use with compatbile compilers + * and the -mindirect-branch=thunk-extern -mindirect-branch-register options. + * + * Copyright (c) 2017-2018 Citrix Systems Ltd. + * + * This source code is licensed under the GNU General Public License, + * Version 2. See the file COPYING for more details. + */ + .file __FILE__ + +#include <asm/asm_defns.h> + +.macro IND_THUNK_RETPOLINE reg:req + call 2f +1: + lfence + jmp 1b +2: + mov %\reg, (%rsp) + ret +.endm + +/* + * Build the __x86_indirect_thunk_* symbols. Currently implement the + * retpoline thunk only. + */ +.macro GEN_INDIRECT_THUNK reg:req + .section .text.__x86_indirect_thunk_\reg, "ax", @progbits + +ENTRY(__x86_indirect_thunk_\reg) + IND_THUNK_RETPOLINE \reg +.endm + +/* Instantiate GEN_INDIRECT_THUNK for each register except %rsp. */ +.irp reg, ax, cx, dx, bx, bp, si, di, 8, 9, 10, 11, 12, 13, 14, 15 + GEN_INDIRECT_THUNK reg=r\reg +.endr diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index d5e8821..d3c984a 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -59,6 +59,7 @@ SECTIONS .text : { _stext = .; /* Text and read-only data */ *(.text) + *(.text.__x86_indirect_thunk_*) *(.text.cold) *(.text.unlikely) *(.fixup) -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |