xref: /OK3568_Linux_fs/kernel/arch/x86/purgatory/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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