Commit | Line | Data |
---|---|---|
b2441318 | 1 | # SPDX-License-Identifier: GPL-2.0 |
c0dd6716 JP |
2 | OBJECT_FILES_NON_STANDARD := y |
3 | ||
8fc5b4d4 VG |
4 | purgatory-y := purgatory.o stack.o setup-x86_$(BITS).o sha256.o entry64.o string.o |
5 | ||
6 | targets += $(purgatory-y) | |
7 | PURGATORY_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 |
15 | CFLAGS_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. | |
19 | PURGATORY_LDFLAGS := -e purgatory_start -nostdlib -z nodefaultlib | |
20 | LDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS) | |
21 | LDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS) | |
22 | targets += purgatory.ro purgatory.chk | |
8fc5b4d4 | 23 | |
e2ac07c0 HG |
24 | # Sanitizer, etc. runtimes are unavailable and cannot be linked here. |
25 | GCOV_PROFILE := n | |
13a6798e | 26 | KASAN_SANITIZE := n |
e2ac07c0 | 27 | UBSAN_SANITIZE := n |
40d04110 | 28 | KCSAN_SANITIZE := n |
543c37cb ER |
29 | KCOV_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 | ||
34 | PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel | |
35 | PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss | |
e2ac07c0 | 36 | PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING |
893ab004 | 37 | PURGATORY_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. |
42 | ifdef CONFIG_FUNCTION_TRACER | |
e16c2983 | 43 | PURGATORY_CFLAGS_REMOVE += $(CC_FLAGS_FTRACE) |
b059f801 ND |
44 | endif |
45 | ||
46 | ifdef CONFIG_STACKPROTECTOR | |
e16c2983 | 47 | PURGATORY_CFLAGS_REMOVE += -fstack-protector |
b059f801 ND |
48 | endif |
49 | ||
50 | ifdef CONFIG_STACKPROTECTOR_STRONG | |
e16c2983 | 51 | PURGATORY_CFLAGS_REMOVE += -fstack-protector-strong |
b059f801 ND |
52 | endif |
53 | ||
54 | ifdef CONFIG_RETPOLINE | |
e16c2983 | 55 | PURGATORY_CFLAGS_REMOVE += $(RETPOLINE_CFLAGS) |
b059f801 | 56 | endif |
8fc5b4d4 | 57 | |
e16c2983 SW |
58 | CFLAGS_REMOVE_purgatory.o += $(PURGATORY_CFLAGS_REMOVE) |
59 | CFLAGS_purgatory.o += $(PURGATORY_CFLAGS) | |
60 | ||
61 | CFLAGS_REMOVE_sha256.o += $(PURGATORY_CFLAGS_REMOVE) | |
62 | CFLAGS_sha256.o += $(PURGATORY_CFLAGS) | |
63 | ||
64 | CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE) | |
65 | CFLAGS_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 |
73 | targets += kexec-purgatory.c |
74 | ||
75 | quiet_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 | 81 | obj-$(CONFIG_KEXEC_FILE) += kexec-purgatory.o |