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