|
@@ -686,55 +686,11 @@ ifneq ($(CONFIG_FRAME_WARN),0)
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
|
|
|
endif
|
|
|
|
|
|
-# This selects the stack protector compiler flag. Testing it is delayed
|
|
|
-# until after .config has been reprocessed, in the prepare-compiler-check
|
|
|
-# target.
|
|
|
-ifdef CONFIG_CC_STACKPROTECTOR_AUTO
|
|
|
- stackp-flag := $(call cc-option,-fstack-protector-strong,$(call cc-option,-fstack-protector))
|
|
|
- stackp-name := AUTO
|
|
|
-else
|
|
|
-ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
|
|
|
- stackp-flag := -fstack-protector
|
|
|
- stackp-name := REGULAR
|
|
|
-else
|
|
|
-ifdef CONFIG_CC_STACKPROTECTOR_STRONG
|
|
|
- stackp-flag := -fstack-protector-strong
|
|
|
- stackp-name := STRONG
|
|
|
-else
|
|
|
- # If either there is no stack protector for this architecture or
|
|
|
- # CONFIG_CC_STACKPROTECTOR_NONE is selected, we're done, and $(stackp-name)
|
|
|
- # is empty, skipping all remaining stack protector tests.
|
|
|
- #
|
|
|
- # Force off for distro compilers that enable stack protector by default.
|
|
|
- KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
|
|
|
-endif
|
|
|
-endif
|
|
|
-endif
|
|
|
-# Find arch-specific stack protector compiler sanity-checking script.
|
|
|
-ifdef stackp-name
|
|
|
-ifneq ($(stackp-flag),)
|
|
|
- stackp-path := $(srctree)/scripts/gcc-$(SRCARCH)_$(BITS)-has-stack-protector.sh
|
|
|
- stackp-check := $(wildcard $(stackp-path))
|
|
|
- # If the wildcard test matches a test script, run it to check functionality.
|
|
|
- ifdef stackp-check
|
|
|
- ifneq ($(shell $(CONFIG_SHELL) $(stackp-check) $(CC) $(KBUILD_CPPFLAGS) $(biarch)),y)
|
|
|
- stackp-broken := y
|
|
|
- endif
|
|
|
- endif
|
|
|
- ifndef stackp-broken
|
|
|
- # If the stack protector is functional, enable code that depends on it.
|
|
|
- KBUILD_CPPFLAGS += -DCONFIG_CC_STACKPROTECTOR
|
|
|
- # Either we've already detected the flag (for AUTO) or we'll fail the
|
|
|
- # build in the prepare-compiler-check rule (for specific flag).
|
|
|
- KBUILD_CFLAGS += $(stackp-flag)
|
|
|
- else
|
|
|
- # We have to make sure stack protector is unconditionally disabled if
|
|
|
- # the compiler is broken (in case we're going to continue the build in
|
|
|
- # AUTO mode).
|
|
|
- KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
|
|
|
- endif
|
|
|
-endif
|
|
|
-endif
|
|
|
+stackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
|
|
|
+stackp-flags-$(CONFIG_CC_STACKPROTECTOR) := -fstack-protector
|
|
|
+stackp-flags-$(CONFIG_CC_STACKPROTECTOR_STRONG) := -fstack-protector-strong
|
|
|
+
|
|
|
+KBUILD_CFLAGS += $(stackp-flags-y)
|
|
|
|
|
|
ifeq ($(cc-name),clang)
|
|
|
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
|
@@ -1118,7 +1074,7 @@ endif
|
|
|
# prepare2 creates a makefile if using a separate output directory.
|
|
|
# From this point forward, .config has been reprocessed, so any rules
|
|
|
# that need to depend on updated CONFIG_* values can be checked here.
|
|
|
-prepare2: prepare3 prepare-compiler-check outputmakefile asm-generic
|
|
|
+prepare2: prepare3 outputmakefile asm-generic
|
|
|
|
|
|
prepare1: prepare2 $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
|
|
|
include/config/auto.conf
|
|
@@ -1144,43 +1100,6 @@ uapi-asm-generic:
|
|
|
PHONY += prepare-objtool
|
|
|
prepare-objtool: $(objtool_target)
|
|
|
|
|
|
-# Check for CONFIG flags that require compiler support. Abort the build
|
|
|
-# after .config has been processed, but before the kernel build starts.
|
|
|
-#
|
|
|
-# For security-sensitive CONFIG options, we don't want to fallback and/or
|
|
|
-# silently change which compiler flags will be used, since that leads to
|
|
|
-# producing kernels with different security feature characteristics
|
|
|
-# depending on the compiler used. (For example, "But I selected
|
|
|
-# CC_STACKPROTECTOR_STRONG! Why did it build with _REGULAR?!")
|
|
|
-PHONY += prepare-compiler-check
|
|
|
-prepare-compiler-check: FORCE
|
|
|
-# Make sure compiler supports requested stack protector flag.
|
|
|
-ifdef stackp-name
|
|
|
- # Warn about CONFIG_CC_STACKPROTECTOR_AUTO having found no option.
|
|
|
- ifeq ($(stackp-flag),)
|
|
|
- @echo CONFIG_CC_STACKPROTECTOR_$(stackp-name): \
|
|
|
- Compiler does not support any known stack-protector >&2
|
|
|
- else
|
|
|
- # Fail if specifically requested stack protector is missing.
|
|
|
- ifeq ($(call cc-option, $(stackp-flag)),)
|
|
|
- @echo Cannot use CONFIG_CC_STACKPROTECTOR_$(stackp-name): \
|
|
|
- $(stackp-flag) not supported by compiler >&2 && exit 1
|
|
|
- endif
|
|
|
- endif
|
|
|
-endif
|
|
|
-# Make sure compiler does not have buggy stack-protector support. If a
|
|
|
-# specific stack-protector was requested, fail the build, otherwise warn.
|
|
|
-ifdef stackp-broken
|
|
|
- ifeq ($(stackp-name),AUTO)
|
|
|
- @echo CONFIG_CC_STACKPROTECTOR_$(stackp-name): \
|
|
|
- $(stackp-flag) available but compiler is broken: disabling >&2
|
|
|
- else
|
|
|
- @echo Cannot use CONFIG_CC_STACKPROTECTOR_$(stackp-name): \
|
|
|
- $(stackp-flag) available but compiler is broken >&2 && exit 1
|
|
|
- endif
|
|
|
-endif
|
|
|
- @:
|
|
|
-
|
|
|
# Generate some files
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|