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