Changes in 5.15.57
x86/traps: Use pt_regs directly in fixup_bad_iret()
x86/entry: Switch the stack after error_entry() returns
x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry()
x86/entry: Don't call error_entry() for XENPV
objtool: Classify symbols
objtool: Explicitly avoid self modifying code in .altinstr_replacement
objtool: Shrink struct instruction
objtool,x86: Replace alternatives with .retpoline_sites
objtool: Introduce CFI hash
x86/retpoline: Remove unused replacement symbols
x86/asm: Fix register order
x86/asm: Fixup odd GEN-for-each-reg.h usage
x86/retpoline: Move the retpoline thunk declarations to nospec-branch.h
x86/retpoline: Create a retpoline thunk array
x86/alternative: Implement .retpoline_sites support
x86/alternative: Handle Jcc __x86_indirect_thunk_\reg
x86/alternative: Try inline spectre_v2=retpoline,amd
x86/alternative: Add debug prints to apply_retpolines()
bpf,x86: Simplify computing label offsets
bpf,x86: Respect X86_FEATURE_RETPOLINE*
objtool: Default ignore INT3 for unreachable
x86/entry: Remove skip_r11rcx
x86/realmode: build with -D__DISABLE_EXPORTS
x86/kvm/vmx: Make noinstr clean
x86/cpufeatures: Move RETPOLINE flags to word 11
x86/retpoline: Cleanup some #ifdefery
x86/retpoline: Swizzle retpoline thunk
x86/retpoline: Use -mfunction-return
x86: Undo return-thunk damage
x86,objtool: Create .return_sites
objtool: skip non-text sections when adding return-thunk sites
x86,static_call: Use alternative RET encoding
x86/ftrace: Use alternative RET encoding
x86/bpf: Use alternative RET encoding
x86/kvm: Fix SETcc emulation for return thunks
x86/vsyscall_emu/64: Don't use RET in vsyscall emulation
x86/sev: Avoid using __x86_return_thunk
x86: Use return-thunk in asm code
x86/entry: Avoid very early RET
objtool: Treat .text.__x86.* as noinstr
x86: Add magic AMD return-thunk
x86/bugs: Report AMD retbleed vulnerability
x86/bugs: Add AMD retbleed= boot parameter
x86/bugs: Enable STIBP for JMP2RET
x86/bugs: Keep a per-CPU IA32_SPEC_CTRL value
x86/entry: Add kernel IBRS implementation
x86/bugs: Optimize SPEC_CTRL MSR writes
x86/speculation: Add spectre_v2=ibrs option to support Kernel IBRS
x86/bugs: Split spectre_v2_select_mitigation() and spectre_v2_user_select_mitigation()
x86/bugs: Report Intel retbleed vulnerability
intel_idle: Disable IBRS during long idle
objtool: Update Retpoline validation
x86/xen: Rename SYS* entry points
x86/xen: Add UNTRAIN_RET
x86/bugs: Add retbleed=ibpb
x86/bugs: Do IBPB fallback check only once
objtool: Add entry UNRET validation
x86/cpu/amd: Add Spectral Chicken
x86/speculation: Fix RSB filling with CONFIG_RETPOLINE=n
x86/speculation: Fix firmware entry SPEC_CTRL handling
x86/speculation: Fix SPEC_CTRL write on SMT state change
x86/speculation: Use cached host SPEC_CTRL value for guest entry/exit
x86/speculation: Remove x86_spec_ctrl_mask
objtool: Re-add UNWIND_HINT_{SAVE_RESTORE}
KVM: VMX: Flatten __vmx_vcpu_run()
KVM: VMX: Convert launched argument to flags
KVM: VMX: Prevent guest RSB poisoning attacks with eIBRS
KVM: VMX: Fix IBRS handling after vmexit
x86/speculation: Fill RSB on vmexit for IBRS
x86/common: Stamp out the stepping madness
x86/cpu/amd: Enumerate BTC_NO
x86/retbleed: Add fine grained Kconfig knobs
x86/bugs: Add Cannon lake to RETBleed affected CPU list
x86/entry: Move PUSH_AND_CLEAR_REGS() back into error_entry
x86/bugs: Do not enable IBPB-on-entry when IBPB is not supported
x86/kexec: Disable RET on kexec
x86/speculation: Disable RRSBA behavior
x86/static_call: Serialize __static_call_fixup() properly
x86/xen: Fix initialisation in hypercall_page after rethunk
x86/asm/32: Fix ANNOTATE_UNRET_SAFE use on 32-bit
x86/speculation: Use DECLARE_PER_CPU for x86_spec_ctrl_current
efi/x86: use naked RET on mixed mode call wrapper
x86/kvm: fix FASTOP_SIZE when return thunks are enabled
KVM: emulate: do not adjust size of fastop and setcc subroutines
tools arch x86: Sync the msr-index.h copy with the kernel sources
tools headers cpufeatures: Sync with the kernel sources
x86/bugs: Remove apostrophe typo
um: Add missing apply_returns()
x86: Use -mindirect-branch-cs-prefix for RETPOLINE builds
Linux 5.15.57
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I41605a6dc38163a964d921f2d4ec8a1a316a5cbc
315 lines
9.9 KiB
Makefile
315 lines
9.9 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
# Unified Makefile for i386 and x86_64
|
|
|
|
# select defconfig based on actual architecture
|
|
ifeq ($(ARCH),x86)
|
|
ifeq ($(shell uname -m),x86_64)
|
|
KBUILD_DEFCONFIG := x86_64_defconfig
|
|
else
|
|
KBUILD_DEFCONFIG := i386_defconfig
|
|
endif
|
|
else
|
|
KBUILD_DEFCONFIG := $(ARCH)_defconfig
|
|
endif
|
|
|
|
# For gcc stack alignment is specified with -mpreferred-stack-boundary,
|
|
# clang has the option -mstack-alignment for that purpose.
|
|
ifneq ($(call cc-option, -mpreferred-stack-boundary=4),)
|
|
cc_stack_align4 := -mpreferred-stack-boundary=2
|
|
cc_stack_align8 := -mpreferred-stack-boundary=3
|
|
else ifneq ($(call cc-option, -mstack-alignment=16),)
|
|
cc_stack_align4 := -mstack-alignment=4
|
|
cc_stack_align8 := -mstack-alignment=8
|
|
endif
|
|
|
|
# How to compile the 16-bit code. Note we always compile for -march=i386;
|
|
# that way we can complain to the user if the CPU is insufficient.
|
|
REALMODE_CFLAGS := -m16 -g -Os -DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS \
|
|
-Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
|
|
-fno-strict-aliasing -fomit-frame-pointer -fno-pic \
|
|
-mno-mmx -mno-sse $(call cc-option,-fcf-protection=none)
|
|
|
|
REALMODE_CFLAGS += -ffreestanding
|
|
REALMODE_CFLAGS += -fno-stack-protector
|
|
REALMODE_CFLAGS += -Wno-address-of-packed-member
|
|
REALMODE_CFLAGS += $(cc_stack_align4)
|
|
REALMODE_CFLAGS += $(CLANG_FLAGS)
|
|
export REALMODE_CFLAGS
|
|
|
|
# BITS is used as extension for files which are available in a 32 bit
|
|
# and a 64 bit version to simplify shared Makefiles.
|
|
# e.g.: obj-y += foo_$(BITS).o
|
|
export BITS
|
|
|
|
#
|
|
# Prevent GCC from generating any FP code by mistake.
|
|
#
|
|
# This must happen before we try the -mpreferred-stack-boundary, see:
|
|
#
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
|
|
#
|
|
KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx
|
|
|
|
# Intel CET isn't enabled in the kernel
|
|
KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
|
|
|
|
ifeq ($(CONFIG_X86_32),y)
|
|
BITS := 32
|
|
UTS_MACHINE := i386
|
|
CHECKFLAGS += -D__i386__
|
|
|
|
KBUILD_AFLAGS += -m32
|
|
KBUILD_CFLAGS += -m32
|
|
|
|
KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
|
|
|
|
# Never want PIC in a 32-bit kernel, prevent breakage with GCC built
|
|
# with nonstandard options
|
|
KBUILD_CFLAGS += -fno-pic
|
|
|
|
# Align the stack to the register width instead of using the default
|
|
# alignment of 16 bytes. This reduces stack usage and the number of
|
|
# alignment instructions.
|
|
KBUILD_CFLAGS += $(cc_stack_align4)
|
|
|
|
# CPU-specific tuning. Anything which can be shared with UML should go here.
|
|
include $(srctree)/arch/x86/Makefile_32.cpu
|
|
KBUILD_CFLAGS += $(cflags-y)
|
|
|
|
# temporary until string.h is fixed
|
|
KBUILD_CFLAGS += -ffreestanding
|
|
|
|
ifeq ($(CONFIG_STACKPROTECTOR),y)
|
|
ifeq ($(CONFIG_SMP),y)
|
|
KBUILD_CFLAGS += -mstack-protector-guard-reg=fs -mstack-protector-guard-symbol=__stack_chk_guard
|
|
else
|
|
KBUILD_CFLAGS += -mstack-protector-guard=global
|
|
endif
|
|
endif
|
|
else
|
|
BITS := 64
|
|
UTS_MACHINE := x86_64
|
|
CHECKFLAGS += -D__x86_64__
|
|
|
|
KBUILD_AFLAGS += -m64
|
|
KBUILD_CFLAGS += -m64
|
|
|
|
# Align jump targets to 1 byte, not the default 16 bytes:
|
|
KBUILD_CFLAGS += $(call cc-option,-falign-jumps=1)
|
|
|
|
# Pack loops tightly as well:
|
|
KBUILD_CFLAGS += $(call cc-option,-falign-loops=1)
|
|
|
|
# Don't autogenerate traditional x87 instructions
|
|
KBUILD_CFLAGS += -mno-80387
|
|
KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387)
|
|
|
|
# By default gcc and clang use a stack alignment of 16 bytes for x86.
|
|
# However the standard kernel entry on x86-64 leaves the stack on an
|
|
# 8-byte boundary. If the compiler isn't informed about the actual
|
|
# alignment it will generate extra alignment instructions for the
|
|
# default alignment which keep the stack *mis*aligned.
|
|
# Furthermore an alignment to the register width reduces stack usage
|
|
# and the number of alignment instructions.
|
|
KBUILD_CFLAGS += $(cc_stack_align8)
|
|
|
|
# Use -mskip-rax-setup if supported.
|
|
KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup)
|
|
|
|
# FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
|
|
cflags-$(CONFIG_MK8) += -march=k8
|
|
cflags-$(CONFIG_MPSC) += -march=nocona
|
|
cflags-$(CONFIG_MCORE2) += -march=core2
|
|
cflags-$(CONFIG_MATOM) += -march=atom
|
|
cflags-$(CONFIG_GENERIC_CPU) += -mtune=generic
|
|
KBUILD_CFLAGS += $(cflags-y)
|
|
|
|
KBUILD_CFLAGS += -mno-red-zone
|
|
KBUILD_CFLAGS += -mcmodel=kernel
|
|
endif
|
|
|
|
ifdef CONFIG_X86_X32
|
|
x32_ld_ok := $(call try-run,\
|
|
/bin/echo -e '1: .quad 1b' | \
|
|
$(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \
|
|
$(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMP.o" && \
|
|
$(LD) -m elf32_x86_64 "$$TMP.o" -o "$$TMP",y,n)
|
|
ifeq ($(x32_ld_ok),y)
|
|
CONFIG_X86_X32_ABI := y
|
|
KBUILD_AFLAGS += -DCONFIG_X86_X32_ABI
|
|
KBUILD_CFLAGS += -DCONFIG_X86_X32_ABI
|
|
else
|
|
$(warning CONFIG_X86_X32 enabled but no binutils support)
|
|
endif
|
|
endif
|
|
export CONFIG_X86_X32_ABI
|
|
|
|
#
|
|
# If the function graph tracer is used with mcount instead of fentry,
|
|
# '-maccumulate-outgoing-args' is needed to prevent a GCC bug
|
|
# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42109)
|
|
#
|
|
ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
|
ifndef CONFIG_HAVE_FENTRY
|
|
ACCUMULATE_OUTGOING_ARGS := 1
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1)
|
|
# This compiler flag is not supported by Clang:
|
|
KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,)
|
|
endif
|
|
|
|
# Workaround for a gcc prelease that unfortunately was shipped in a suse release
|
|
KBUILD_CFLAGS += -Wno-sign-compare
|
|
#
|
|
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
|
|
|
# Avoid indirect branches in kernel to deal with Spectre
|
|
ifdef CONFIG_RETPOLINE
|
|
KBUILD_CFLAGS += $(RETPOLINE_CFLAGS)
|
|
# Additionally, avoid generating expensive indirect jumps which
|
|
# are subject to retpolines for small number of switch cases.
|
|
# clang turns off jump table generation by default when under
|
|
# retpoline builds, however, gcc does not for x86. This has
|
|
# only been fixed starting from gcc stable version 8.4.0 and
|
|
# onwards, but not for older ones. See gcc bug #86952.
|
|
ifndef CONFIG_CC_IS_CLANG
|
|
KBUILD_CFLAGS += -fno-jump-tables
|
|
endif
|
|
endif
|
|
|
|
ifdef CONFIG_SLS
|
|
KBUILD_CFLAGS += -mharden-sls=all
|
|
endif
|
|
|
|
KBUILD_LDFLAGS += -m elf_$(UTS_MACHINE)
|
|
|
|
ifdef CONFIG_LTO_CLANG
|
|
ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0)
|
|
KBUILD_LDFLAGS += -plugin-opt=-stack-alignment=$(if $(CONFIG_X86_32),4,8)
|
|
endif
|
|
endif
|
|
|
|
ifdef CONFIG_X86_NEED_RELOCS
|
|
LDFLAGS_vmlinux := --emit-relocs --discard-none
|
|
else
|
|
LDFLAGS_vmlinux :=
|
|
endif
|
|
|
|
#
|
|
# The 64-bit kernel must be aligned to 2MB. Pass -z max-page-size=0x200000 to
|
|
# the linker to force 2MB page size regardless of the default page size used
|
|
# by the linker.
|
|
#
|
|
ifdef CONFIG_X86_64
|
|
LDFLAGS_vmlinux += -z max-page-size=0x200000
|
|
endif
|
|
|
|
|
|
archscripts: scripts_basic
|
|
$(Q)$(MAKE) $(build)=arch/x86/tools relocs
|
|
|
|
###
|
|
# Syscall table generation
|
|
|
|
archheaders:
|
|
$(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all
|
|
|
|
###
|
|
# Kernel objects
|
|
|
|
head-y := arch/x86/kernel/head_$(BITS).o
|
|
head-y += arch/x86/kernel/head$(BITS).o
|
|
head-y += arch/x86/kernel/ebda.o
|
|
head-y += arch/x86/kernel/platform-quirks.o
|
|
|
|
libs-y += arch/x86/lib/
|
|
|
|
# drivers-y are linked after core-y
|
|
drivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/
|
|
drivers-$(CONFIG_PCI) += arch/x86/pci/
|
|
|
|
# suspend and hibernation support
|
|
drivers-$(CONFIG_PM) += arch/x86/power/
|
|
|
|
drivers-$(CONFIG_FB) += arch/x86/video/
|
|
|
|
####
|
|
# boot loader support. Several targets are kept for legacy purposes
|
|
|
|
boot := arch/x86/boot
|
|
|
|
BOOT_TARGETS = bzdisk fdimage fdimage144 fdimage288 hdimage isoimage
|
|
|
|
PHONY += bzImage $(BOOT_TARGETS)
|
|
|
|
# Don't compile Image in mixed build with "all" target
|
|
ifndef KBUILD_MIXED_TREE
|
|
# Default kernel to build
|
|
all: bzImage
|
|
endif
|
|
|
|
# KBUILD_IMAGE specify target image being built
|
|
KBUILD_IMAGE := $(boot)/bzImage
|
|
|
|
bzImage: vmlinux
|
|
ifeq ($(CONFIG_X86_DECODER_SELFTEST),y)
|
|
$(Q)$(MAKE) $(build)=arch/x86/tools posttest
|
|
endif
|
|
$(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE)
|
|
$(Q)mkdir -p $(objtree)/arch/$(UTS_MACHINE)/boot
|
|
$(Q)ln -fsn ../../x86/boot/bzImage $(objtree)/arch/$(UTS_MACHINE)/boot/$@
|
|
|
|
$(BOOT_TARGETS): vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) $@
|
|
|
|
PHONY += install
|
|
install:
|
|
$(CONFIG_SHELL) $(srctree)/$(boot)/install.sh $(KERNELRELEASE) \
|
|
$(KBUILD_IMAGE) System.map "$(INSTALL_PATH)"
|
|
|
|
PHONY += vdso_install
|
|
vdso_install:
|
|
$(Q)$(MAKE) $(build)=arch/x86/entry/vdso $@
|
|
|
|
archprepare: checkbin
|
|
checkbin:
|
|
ifndef CONFIG_CC_HAS_ASM_GOTO
|
|
@echo Compiler lacks asm-goto support.
|
|
@exit 1
|
|
endif
|
|
ifdef CONFIG_RETPOLINE
|
|
ifeq ($(RETPOLINE_CFLAGS),)
|
|
@echo "You are building kernel with non-retpoline compiler." >&2
|
|
@echo "Please update your compiler." >&2
|
|
@false
|
|
endif
|
|
endif
|
|
|
|
archclean:
|
|
$(Q)rm -rf $(objtree)/arch/i386
|
|
$(Q)rm -rf $(objtree)/arch/x86_64
|
|
$(Q)$(MAKE) $(clean)=$(boot)
|
|
$(Q)$(MAKE) $(clean)=arch/x86/tools
|
|
|
|
define archhelp
|
|
echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
|
|
echo ' install - Install kernel using (your) ~/bin/$(INSTALLKERNEL) or'
|
|
echo ' (distribution) /sbin/$(INSTALLKERNEL) or install to '
|
|
echo ' $$(INSTALL_PATH) and run lilo'
|
|
echo ''
|
|
echo ' fdimage - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)'
|
|
echo ' fdimage144 - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)'
|
|
echo ' fdimage288 - Create 2.8MB boot floppy image (arch/x86/boot/fdimage)'
|
|
echo ' hdimage - Create a BIOS/EFI hard disk image (arch/x86/boot/hdimage)'
|
|
echo ' isoimage - Create a boot CD-ROM image (arch/x86/boot/image.iso)'
|
|
echo ' bzdisk/fdimage*/hdimage/isoimage also accept:'
|
|
echo ' FDARGS="..." arguments for the booted kernel'
|
|
echo ' FDINITRD=file initrd for the booted kernel'
|
|
echo ''
|
|
echo ' kvm_guest.config - Enable Kconfig items for running this kernel as a KVM guest'
|
|
echo ' xen.config - Enable Kconfig items for running this kernel as a Xen guest'
|
|
|
|
endef
|