^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) OBJECT_FILES_NON_STANDARD := y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) purgatory-y := purgatory.o stack.o setup-x86_$(BITS).o sha256.o entry64.o string.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) targets += $(purgatory-y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) $(obj)/string.o: $(srctree)/arch/x86/boot/compressed/string.c FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) $(call if_changed_rule,cc_o_c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) $(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) $(call if_changed_rule,cc_o_c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) CFLAGS_sha256.o := -D__DISABLE_EXPORTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) # When linking purgatory.ro with -r unresolved symbols are not checked,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) # also link a purgatory.chk binary without -r to check for unresolved symbols.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) PURGATORY_LDFLAGS := -e purgatory_start -nostdlib -z nodefaultlib
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) LDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) LDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) targets += purgatory.ro purgatory.chk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) # Sanitizer, etc. runtimes are unavailable and cannot be linked here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) GCOV_PROFILE := n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) KASAN_SANITIZE := n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) UBSAN_SANITIZE := n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) KCSAN_SANITIZE := n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) KCOV_INSTRUMENT := n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) # These are adjustments to the compiler flags used for objects that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) # make up the standalone purgatory.ro
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel $(CC_FLAGS_CFI)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss -g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) PURGATORY_CFLAGS += -fno-stack-protector
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) # in turn leaves some undefined symbols like __fentry__ in purgatory and not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) # sure how to relocate those.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) ifdef CONFIG_FUNCTION_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) PURGATORY_CFLAGS_REMOVE += $(CC_FLAGS_FTRACE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) ifdef CONFIG_STACKPROTECTOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) PURGATORY_CFLAGS_REMOVE += -fstack-protector
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) ifdef CONFIG_STACKPROTECTOR_STRONG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) PURGATORY_CFLAGS_REMOVE += -fstack-protector-strong
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) ifdef CONFIG_RETPOLINE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) PURGATORY_CFLAGS_REMOVE += $(RETPOLINE_CFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) CFLAGS_REMOVE_purgatory.o += $(PURGATORY_CFLAGS_REMOVE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) CFLAGS_purgatory.o += $(PURGATORY_CFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) CFLAGS_REMOVE_sha256.o += $(PURGATORY_CFLAGS_REMOVE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) CFLAGS_sha256.o += $(PURGATORY_CFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) CFLAGS_string.o += $(PURGATORY_CFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) AFLAGS_REMOVE_setup-x86_$(BITS).o += -Wa,-gdwarf-2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) AFLAGS_REMOVE_entry64.o += -Wa,-gdwarf-2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) $(call if_changed,ld)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) $(obj)/purgatory.chk: $(obj)/purgatory.ro FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) $(call if_changed,ld)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) targets += kexec-purgatory.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) quiet_cmd_bin2c = BIN2C $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) cmd_bin2c = $(objtree)/scripts/bin2c kexec_purgatory < $< > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) $(obj)/kexec-purgatory.c: $(obj)/purgatory.ro $(obj)/purgatory.chk FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) $(call if_changed,bin2c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) obj-$(CONFIG_KEXEC_FILE) += kexec-purgatory.o