x86/build: Remove stale cc-option checks

cc-option, __cc-option, cc-option-yn, and cc-disable-warning all invoke
the compiler during build time, and can slow down the build when these
checks become stale for our supported compilers, whose minimally
supported versions increases over time.

See Documentation/process/changes.rst for the current supported minimal
versions (GCC 4.9+, clang 10.0.1+). Compiler version support for these
flags may be verified on godbolt.org.

The following flags are supported by all supported versions of GCC and
Clang. Remove their cc-option, __cc-option, and cc-option-yn tests.

  -Wno-address-of-packed-member
  -mno-avx
  -m32
  -mno-80387
  -march=k8
  -march=nocona
  -march=core2
  -march=atom
  -mtune=generic
  -mfentry

[ mingo: Fixed regression on GCC, via partial revert of the stack-boundary changes.  ]

Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://github.com/ClangBuiltLinux/linux/issues/1436
Link: https://lkml.kernel.org/r/20210812183848.1519994-1-ndesaulniers@google.com
This commit is contained in:
Nick Desaulniers 2021-08-12 11:38:48 -07:00 committed by Ingo Molnar
parent 36a21d5172
commit 989ceac799

View File

@ -31,8 +31,8 @@ REALMODE_CFLAGS := -m16 -g -Os -DDISABLE_BRANCH_PROFILING \
REALMODE_CFLAGS += -ffreestanding REALMODE_CFLAGS += -ffreestanding
REALMODE_CFLAGS += -fno-stack-protector REALMODE_CFLAGS += -fno-stack-protector
REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -Wno-address-of-packed-member) REALMODE_CFLAGS += -Wno-address-of-packed-member
REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), $(cc_stack_align4)) REALMODE_CFLAGS += $(cc_stack_align4)
REALMODE_CFLAGS += $(CLANG_FLAGS) REALMODE_CFLAGS += $(CLANG_FLAGS)
export REALMODE_CFLAGS export REALMODE_CFLAGS
@ -48,8 +48,7 @@ export BITS
# #
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
# #
KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx
KBUILD_CFLAGS += $(call cc-option,-mno-avx,)
# Intel CET isn't enabled in the kernel # Intel CET isn't enabled in the kernel
KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none) KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
@ -59,9 +58,8 @@ ifeq ($(CONFIG_X86_32),y)
UTS_MACHINE := i386 UTS_MACHINE := i386
CHECKFLAGS += -D__i386__ CHECKFLAGS += -D__i386__
biarch := $(call cc-option,-m32) KBUILD_AFLAGS += -m32
KBUILD_AFLAGS += $(biarch) KBUILD_CFLAGS += -m32
KBUILD_CFLAGS += $(biarch)
KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
@ -72,7 +70,7 @@ ifeq ($(CONFIG_X86_32),y)
# Align the stack to the register width instead of using the default # 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 of 16 bytes. This reduces stack usage and the number of
# alignment instructions. # alignment instructions.
KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align4)) KBUILD_CFLAGS += $(cc_stack_align4)
# CPU-specific tuning. Anything which can be shared with UML should go here. # CPU-specific tuning. Anything which can be shared with UML should go here.
include arch/x86/Makefile_32.cpu include arch/x86/Makefile_32.cpu
@ -93,7 +91,6 @@ else
UTS_MACHINE := x86_64 UTS_MACHINE := x86_64
CHECKFLAGS += -D__x86_64__ CHECKFLAGS += -D__x86_64__
biarch := -m64
KBUILD_AFLAGS += -m64 KBUILD_AFLAGS += -m64
KBUILD_CFLAGS += -m64 KBUILD_CFLAGS += -m64
@ -104,7 +101,7 @@ else
KBUILD_CFLAGS += $(call cc-option,-falign-loops=1) KBUILD_CFLAGS += $(call cc-option,-falign-loops=1)
# Don't autogenerate traditional x87 instructions # Don't autogenerate traditional x87 instructions
KBUILD_CFLAGS += $(call cc-option,-mno-80387) KBUILD_CFLAGS += -mno-80387
KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387) KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387)
# By default gcc and clang use a stack alignment of 16 bytes for x86. # By default gcc and clang use a stack alignment of 16 bytes for x86.
@ -114,20 +111,17 @@ else
# default alignment which keep the stack *mis*aligned. # default alignment which keep the stack *mis*aligned.
# Furthermore an alignment to the register width reduces stack usage # Furthermore an alignment to the register width reduces stack usage
# and the number of alignment instructions. # and the number of alignment instructions.
KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align8)) KBUILD_CFLAGS += $(cc_stack_align8)
# Use -mskip-rax-setup if supported. # Use -mskip-rax-setup if supported.
KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup) KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup)
# FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu) # FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8) cflags-$(CONFIG_MK8) += -march=k8
cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona) cflags-$(CONFIG_MPSC) += -march=nocona
cflags-$(CONFIG_MCORE2) += -march=core2
cflags-$(CONFIG_MCORE2) += \ cflags-$(CONFIG_MATOM) += -march=atom
$(call cc-option,-march=core2,$(call cc-option,-mtune=generic)) cflags-$(CONFIG_GENERIC_CPU) += -mtune=generic
cflags-$(CONFIG_MATOM) += $(call cc-option,-march=atom) \
$(call cc-option,-mtune=atom,$(call cc-option,-mtune=generic))
cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
KBUILD_CFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y)
KBUILD_CFLAGS += -mno-red-zone KBUILD_CFLAGS += -mno-red-zone
@ -158,18 +152,6 @@ export CONFIG_X86_X32_ABI
ifdef CONFIG_FUNCTION_GRAPH_TRACER ifdef CONFIG_FUNCTION_GRAPH_TRACER
ifndef CONFIG_HAVE_FENTRY ifndef CONFIG_HAVE_FENTRY
ACCUMULATE_OUTGOING_ARGS := 1 ACCUMULATE_OUTGOING_ARGS := 1
else
ifeq ($(call cc-option-yn, -mfentry), n)
ACCUMULATE_OUTGOING_ARGS := 1
# GCC ignores '-maccumulate-outgoing-args' when used with '-Os'.
# If '-Os' is enabled, disable it and print a warning.
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
undefine CONFIG_CC_OPTIMIZE_FOR_SIZE
$(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE. Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.)
endif
endif
endif endif
endif endif
@ -193,7 +175,7 @@ ifdef CONFIG_RETPOLINE
# only been fixed starting from gcc stable version 8.4.0 and # only been fixed starting from gcc stable version 8.4.0 and
# onwards, but not for older ones. See gcc bug #86952. # onwards, but not for older ones. See gcc bug #86952.
ifndef CONFIG_CC_IS_CLANG ifndef CONFIG_CC_IS_CLANG
KBUILD_CFLAGS += $(call cc-option,-fno-jump-tables) KBUILD_CFLAGS += -fno-jump-tables
endif endif
endif endif