mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-27 06:50:37 +00:00

In preparation for adding Clang sanitizer coverage stack depth tracking that can support stack depth callbacks: - Add the new top-level CONFIG_KSTACK_ERASE option which will be implemented either with the stackleak GCC plugin, or with the Clang stack depth callback support. - Rename CONFIG_GCC_PLUGIN_STACKLEAK as needed to CONFIG_KSTACK_ERASE, but keep it for anything specific to the GCC plugin itself. - Rename all exposed "STACKLEAK" names and files to "KSTACK_ERASE" (named for what it does rather than what it protects against), but leave as many of the internals alone as possible to avoid even more churn. While here, also split "prev_lowest_stack" into CONFIG_KSTACK_ERASE_METRICS, since that's the only place it is referenced from. Suggested-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20250717232519.2984886-1-kees@kernel.org Signed-off-by: Kees Cook <kees@kernel.org>
109 lines
3.4 KiB
Makefile
109 lines
3.4 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
purgatory-y := purgatory.o sha256.o entry.o string.o ctype.o memcpy.o memset.o
|
|
ifeq ($(CONFIG_KASAN_GENERIC)$(CONFIG_KASAN_SW_TAGS),)
|
|
purgatory-y += strcmp.o strlen.o strncmp.o
|
|
endif
|
|
|
|
targets += $(purgatory-y)
|
|
PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y))
|
|
|
|
$(obj)/string.o: $(srctree)/lib/string.c FORCE
|
|
$(call if_changed_rule,cc_o_c)
|
|
|
|
$(obj)/ctype.o: $(srctree)/lib/ctype.c FORCE
|
|
$(call if_changed_rule,cc_o_c)
|
|
|
|
$(obj)/memcpy.o: $(srctree)/arch/riscv/lib/memcpy.S FORCE
|
|
$(call if_changed_rule,as_o_S)
|
|
|
|
$(obj)/memset.o: $(srctree)/arch/riscv/lib/memset.S FORCE
|
|
$(call if_changed_rule,as_o_S)
|
|
|
|
$(obj)/strcmp.o: $(srctree)/arch/riscv/lib/strcmp.S FORCE
|
|
$(call if_changed_rule,as_o_S)
|
|
|
|
$(obj)/strlen.o: $(srctree)/arch/riscv/lib/strlen.S FORCE
|
|
$(call if_changed_rule,as_o_S)
|
|
|
|
$(obj)/strncmp.o: $(srctree)/arch/riscv/lib/strncmp.S FORCE
|
|
$(call if_changed_rule,as_o_S)
|
|
|
|
$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
|
|
$(call if_changed_rule,cc_o_c)
|
|
|
|
CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
|
|
CFLAGS_string.o := -D__DISABLE_EXPORTS
|
|
CFLAGS_ctype.o := -D__DISABLE_EXPORTS
|
|
|
|
# When profile-guided optimization is enabled, llvm emits two different
|
|
# overlapping text sections, which is not supported by kexec. Remove profile
|
|
# optimization flags.
|
|
KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
|
|
|
|
# When linking purgatory.ro with -r unresolved symbols are not checked,
|
|
# also link a purgatory.chk binary without -r to check for unresolved symbols.
|
|
PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
|
|
LDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS)
|
|
LDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS)
|
|
targets += purgatory.ro purgatory.chk
|
|
|
|
# These are adjustments to the compiler flags used for objects that
|
|
# make up the standalone purgatory.ro
|
|
|
|
PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
|
|
PURGATORY_CFLAGS := -mcmodel=medany -ffreestanding -fno-zero-initialized-in-bss
|
|
PURGATORY_CFLAGS += $(DISABLE_KSTACK_ERASE) -DDISABLE_BRANCH_PROFILING
|
|
PURGATORY_CFLAGS += -fno-stack-protector -g0
|
|
|
|
# Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
|
|
# in turn leaves some undefined symbols like __fentry__ in purgatory and not
|
|
# sure how to relocate those.
|
|
ifdef CONFIG_FUNCTION_TRACER
|
|
PURGATORY_CFLAGS_REMOVE += $(CC_FLAGS_FTRACE)
|
|
endif
|
|
|
|
ifdef CONFIG_STACKPROTECTOR
|
|
PURGATORY_CFLAGS_REMOVE += -fstack-protector
|
|
endif
|
|
|
|
ifdef CONFIG_STACKPROTECTOR_STRONG
|
|
PURGATORY_CFLAGS_REMOVE += -fstack-protector-strong
|
|
endif
|
|
|
|
ifdef CONFIG_CFI_CLANG
|
|
PURGATORY_CFLAGS_REMOVE += $(CC_FLAGS_CFI)
|
|
endif
|
|
|
|
ifdef CONFIG_RELOCATABLE
|
|
PURGATORY_CFLAGS_REMOVE += -fPIE
|
|
endif
|
|
|
|
ifdef CONFIG_SHADOW_CALL_STACK
|
|
PURGATORY_CFLAGS_REMOVE += $(CC_FLAGS_SCS)
|
|
endif
|
|
|
|
CFLAGS_REMOVE_purgatory.o += $(PURGATORY_CFLAGS_REMOVE)
|
|
CFLAGS_purgatory.o += $(PURGATORY_CFLAGS)
|
|
|
|
CFLAGS_REMOVE_sha256.o += $(PURGATORY_CFLAGS_REMOVE)
|
|
CFLAGS_sha256.o += $(PURGATORY_CFLAGS)
|
|
|
|
CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE)
|
|
CFLAGS_string.o += $(PURGATORY_CFLAGS)
|
|
|
|
CFLAGS_REMOVE_ctype.o += $(PURGATORY_CFLAGS_REMOVE)
|
|
CFLAGS_ctype.o += $(PURGATORY_CFLAGS)
|
|
|
|
asflags-remove-y += $(foreach x, -g -gdwarf-4 -gdwarf-5, $(x) -Wa,$(x))
|
|
|
|
$(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE
|
|
$(call if_changed,ld)
|
|
|
|
$(obj)/purgatory.chk: $(obj)/purgatory.ro FORCE
|
|
$(call if_changed,ld)
|
|
|
|
$(obj)/kexec-purgatory.o: $(obj)/purgatory.ro $(obj)/purgatory.chk
|
|
|
|
obj-y += kexec-purgatory.o
|