xref: /openbmc/linux/arch/x86/purgatory/Makefile (revision 2d78eb0342dd2c9c5cde9ae9ada1d33f189a858b)
1b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
2c0dd6716SJosh PoimboeufOBJECT_FILES_NON_STANDARD := y
3c0dd6716SJosh Poimboeuf
48fc5b4d4SVivek Goyalpurgatory-y := purgatory.o stack.o setup-x86_$(BITS).o sha256.o entry64.o string.o
58fc5b4d4SVivek Goyal
68fc5b4d4SVivek Goyaltargets += $(purgatory-y)
78fc5b4d4SVivek GoyalPURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y))
88fc5b4d4SVivek Goyal
94ce97317SNick Desaulniers$(obj)/string.o: $(srctree)/arch/x86/boot/compressed/string.c FORCE
104ce97317SNick Desaulniers	$(call if_changed_rule,cc_o_c)
114ce97317SNick Desaulniers
12ad767ee8SHans de Goede$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
13df6f2801SPhilipp Rudo	$(call if_changed_rule,cc_o_c)
14df6f2801SPhilipp Rudo
1501d3aee8SHans de GoedeCFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
1601d3aee8SHans de Goede
17e4160b2eSHans de Goede# When profile-guided optimization is enabled, llvm emits two different
18e4160b2eSHans de Goede# overlapping text sections, which is not supported by kexec. Remove profile
199102fa34SMasahiro Yamada# optimization flags.
20e4160b2eSHans de GoedeKBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
21e4160b2eSHans de Goede
22e4160b2eSHans de Goede# When LTO is enabled, llvm emits many text sections, which is not supported
238fc5b4d4SVivek Goyal# by kexec. Remove -flto=* flags.
24e2ac07c0SHans de GoedeKBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO),$(KBUILD_CFLAGS))
25e2ac07c0SHans de Goede
2613a6798eSMike Galbraith# When linking purgatory.ro with -r unresolved symbols are not checked,
27e2ac07c0SHans de Goede# also link a purgatory.chk binary without -r to check for unresolved symbols.
2840d04110SMarco ElverPURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
29*42855f58SAlexander PotapenkoLDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS)
30543c37cbSEmese RevfyLDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS)
31543c37cbSEmese Revfytargets += purgatory.ro purgatory.chk
32e16c2983SSteve Wahl
33e16c2983SSteve Wahl# Sanitizer, etc. runtimes are unavailable and cannot be linked here.
34e16c2983SSteve WahlGCOV_PROFILE	:= n
35e16c2983SSteve WahlKASAN_SANITIZE	:= n
3652416ffcSPingfan LiuUBSAN_SANITIZE	:= n
37e2ac07c0SHans de GoedeKCSAN_SANITIZE	:= n
38893ab004SMasahiro YamadaKMSAN_SANITIZE	:= n
39e16c2983SSteve WahlKCOV_INSTRUMENT := n
408fc5b4d4SVivek Goyal
418fc5b4d4SVivek Goyal# These are adjustments to the compiler flags used for objects that
42b059f801SNick Desaulniers# make up the standalone purgatory.ro
43b059f801SNick Desaulniers
44e16c2983SSteve WahlPURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
45b059f801SNick DesaulniersPURGATORY_CFLAGS := -mcmodel=small -ffreestanding -fno-zero-initialized-in-bss -g0
468fc5b4d4SVivek GoyalPURGATORY_CFLAGS += -fpic -fvisibility=hidden
47b059f801SNick DesaulniersPURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
48e16c2983SSteve WahlPURGATORY_CFLAGS += -fno-stack-protector
49b059f801SNick Desaulniers
50b059f801SNick Desaulniers# Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
51b059f801SNick Desaulniers# in turn leaves some undefined symbols like __fentry__ in purgatory and not
52e16c2983SSteve Wahl# sure how to relocate those.
53b059f801SNick Desaulniersifdef CONFIG_FUNCTION_TRACER
54b059f801SNick DesaulniersPURGATORY_CFLAGS_REMOVE		+= $(CC_FLAGS_FTRACE)
55b059f801SNick Desaulniersendif
56e16c2983SSteve Wahl
57b059f801SNick Desaulniersifdef CONFIG_STACKPROTECTOR
588fc5b4d4SVivek GoyalPURGATORY_CFLAGS_REMOVE		+= -fstack-protector
59a4b7a12cSSami Tolvanenendif
60a4b7a12cSSami Tolvanen
61a4b7a12cSSami Tolvanenifdef CONFIG_STACKPROTECTOR_STRONG
62a4b7a12cSSami TolvanenPURGATORY_CFLAGS_REMOVE		+= -fstack-protector-strong
63e16c2983SSteve Wahlendif
64e16c2983SSteve Wahl
65e16c2983SSteve Wahlifdef CONFIG_RETPOLINE
66e16c2983SSteve WahlPURGATORY_CFLAGS_REMOVE		+= $(RETPOLINE_CFLAGS)
67e16c2983SSteve Wahlendif
68e16c2983SSteve Wahl
69e16c2983SSteve Wahlifdef CONFIG_CFI_CLANG
70e16c2983SSteve WahlPURGATORY_CFLAGS_REMOVE		+= $(CC_FLAGS_CFI)
71e16c2983SSteve Wahlendif
7252416ffcSPingfan Liu
7352416ffcSPingfan LiuCFLAGS_REMOVE_purgatory.o	+= $(PURGATORY_CFLAGS_REMOVE)
7452416ffcSPingfan LiuCFLAGS_purgatory.o		+= $(PURGATORY_CFLAGS)
758fc5b4d4SVivek Goyal
768fc5b4d4SVivek GoyalCFLAGS_REMOVE_sha256.o		+= $(PURGATORY_CFLAGS_REMOVE)
778fc5b4d4SVivek GoyalCFLAGS_sha256.o			+= $(PURGATORY_CFLAGS)
78e4160b2eSHans de Goede
79e4160b2eSHans de GoedeCFLAGS_REMOVE_string.o		+= $(PURGATORY_CFLAGS_REMOVE)
80e4160b2eSHans de GoedeCFLAGS_string.o			+= $(PURGATORY_CFLAGS)
812d17bd24SMasahiro Yamada
828fc5b4d4SVivek Goyalasflags-remove-y		+= $(foreach x, -g -gdwarf-4 -gdwarf-5, $(x) -Wa,$(x))
8361922d3fSMasahiro Yamada
84$(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE
85		$(call if_changed,ld)
86
87$(obj)/purgatory.chk: $(obj)/purgatory.ro FORCE
88		$(call if_changed,ld)
89
90$(obj)/kexec-purgatory.o: $(obj)/purgatory.ro $(obj)/purgatory.chk
91
92obj-y += kexec-purgatory.o
93