]>
Commit | Line | Data |
---|---|---|
736e30af LZ |
1 | # SPDX-License-Identifier: GPL-2.0 |
2 | OBJECT_FILES_NON_STANDARD := y | |
3 | ||
4 | purgatory-y := purgatory.o sha256.o entry.o string.o ctype.o memcpy.o memset.o | |
5 | ||
6 | targets += $(purgatory-y) | |
7 | PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y)) | |
8 | ||
9 | $(obj)/string.o: $(srctree)/lib/string.c FORCE | |
10 | $(call if_changed_rule,cc_o_c) | |
11 | ||
12 | $(obj)/ctype.o: $(srctree)/lib/ctype.c FORCE | |
13 | $(call if_changed_rule,cc_o_c) | |
14 | ||
15 | $(obj)/memcpy.o: $(srctree)/arch/riscv/lib/memcpy.S FORCE | |
16 | $(call if_changed_rule,as_o_S) | |
17 | ||
18 | $(obj)/memset.o: $(srctree)/arch/riscv/lib/memset.S FORCE | |
19 | $(call if_changed_rule,as_o_S) | |
20 | ||
21 | $(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE | |
22 | $(call if_changed_rule,cc_o_c) | |
23 | ||
24 | CFLAGS_sha256.o := -D__DISABLE_EXPORTS | |
25 | CFLAGS_string.o := -D__DISABLE_EXPORTS | |
26 | CFLAGS_ctype.o := -D__DISABLE_EXPORTS | |
27 | ||
28 | # When linking purgatory.ro with -r unresolved symbols are not checked, | |
29 | # also link a purgatory.chk binary without -r to check for unresolved symbols. | |
30 | PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib | |
31 | LDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS) | |
32 | LDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS) | |
33 | targets += purgatory.ro purgatory.chk | |
34 | ||
35 | # Sanitizer, etc. runtimes are unavailable and cannot be linked here. | |
36 | GCOV_PROFILE := n | |
37 | KASAN_SANITIZE := n | |
38 | UBSAN_SANITIZE := n | |
39 | KCSAN_SANITIZE := n | |
40 | KCOV_INSTRUMENT := n | |
41 | ||
42 | # These are adjustments to the compiler flags used for objects that | |
43 | # make up the standalone purgatory.ro | |
44 | ||
45 | PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel | |
46 | PURGATORY_CFLAGS := -mcmodel=medany -ffreestanding -fno-zero-initialized-in-bss | |
47 | PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING | |
48 | PURGATORY_CFLAGS += -fno-stack-protector -g0 | |
49 | ||
50 | # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That | |
51 | # in turn leaves some undefined symbols like __fentry__ in purgatory and not | |
52 | # sure how to relocate those. | |
53 | ifdef CONFIG_FUNCTION_TRACER | |
54 | PURGATORY_CFLAGS_REMOVE += $(CC_FLAGS_FTRACE) | |
55 | endif | |
56 | ||
57 | ifdef CONFIG_STACKPROTECTOR | |
58 | PURGATORY_CFLAGS_REMOVE += -fstack-protector | |
59 | endif | |
60 | ||
61 | ifdef CONFIG_STACKPROTECTOR_STRONG | |
62 | PURGATORY_CFLAGS_REMOVE += -fstack-protector-strong | |
63 | endif | |
64 | ||
65 | CFLAGS_REMOVE_purgatory.o += $(PURGATORY_CFLAGS_REMOVE) | |
66 | CFLAGS_purgatory.o += $(PURGATORY_CFLAGS) | |
67 | ||
68 | CFLAGS_REMOVE_sha256.o += $(PURGATORY_CFLAGS_REMOVE) | |
69 | CFLAGS_sha256.o += $(PURGATORY_CFLAGS) | |
70 | ||
71 | CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE) | |
72 | CFLAGS_string.o += $(PURGATORY_CFLAGS) | |
73 | ||
74 | CFLAGS_REMOVE_ctype.o += $(PURGATORY_CFLAGS_REMOVE) | |
75 | CFLAGS_ctype.o += $(PURGATORY_CFLAGS) | |
76 | ||
77 | AFLAGS_REMOVE_entry.o += -Wa,-gdwarf-2 | |
78 | AFLAGS_REMOVE_memcpy.o += -Wa,-gdwarf-2 | |
79 | AFLAGS_REMOVE_memset.o += -Wa,-gdwarf-2 | |
80 | ||
81 | $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE | |
82 | $(call if_changed,ld) | |
83 | ||
84 | $(obj)/purgatory.chk: $(obj)/purgatory.ro FORCE | |
85 | $(call if_changed,ld) | |
86 | ||
d8357e3b | 87 | $(obj)/kexec-purgatory.o: $(obj)/purgatory.ro $(obj)/purgatory.chk |
736e30af | 88 | |
788177e7 | 89 | obj-y += kexec-purgatory.o |