.. | .. |
---|
9 | 9 | $(obj)/string.o: $(srctree)/arch/x86/boot/compressed/string.c FORCE |
---|
10 | 10 | $(call if_changed_rule,cc_o_c) |
---|
11 | 11 | |
---|
12 | | -$(obj)/sha256.o: $(srctree)/lib/sha256.c FORCE |
---|
| 12 | +$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE |
---|
13 | 13 | $(call if_changed_rule,cc_o_c) |
---|
14 | 14 | |
---|
15 | | -LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined -nostdlib -z nodefaultlib |
---|
16 | | -targets += purgatory.ro |
---|
| 15 | +CFLAGS_sha256.o := -D__DISABLE_EXPORTS |
---|
| 16 | + |
---|
| 17 | +# When profile-guided optimization is enabled, llvm emits two different |
---|
| 18 | +# overlapping text sections, which is not supported by kexec. Remove profile |
---|
| 19 | +# optimization flags. |
---|
| 20 | +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS)) |
---|
| 21 | + |
---|
| 22 | +# When linking purgatory.ro with -r unresolved symbols are not checked, |
---|
| 23 | +# also link a purgatory.chk binary without -r to check for unresolved symbols. |
---|
| 24 | +PURGATORY_LDFLAGS := -e purgatory_start -nostdlib -z nodefaultlib |
---|
| 25 | +LDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS) |
---|
| 26 | +LDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS) |
---|
| 27 | +targets += purgatory.ro purgatory.chk |
---|
17 | 28 | |
---|
18 | 29 | # Sanitizer, etc. runtimes are unavailable and cannot be linked here. |
---|
19 | 30 | GCOV_PROFILE := n |
---|
20 | 31 | KASAN_SANITIZE := n |
---|
21 | 32 | UBSAN_SANITIZE := n |
---|
| 33 | +KCSAN_SANITIZE := n |
---|
22 | 34 | KCOV_INSTRUMENT := n |
---|
23 | 35 | |
---|
24 | 36 | # These are adjustments to the compiler flags used for objects that |
---|
25 | 37 | # make up the standalone purgatory.ro |
---|
26 | 38 | |
---|
27 | | -PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel |
---|
28 | | -PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss |
---|
| 39 | +PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel $(CC_FLAGS_CFI) |
---|
| 40 | +PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss -g0 |
---|
29 | 41 | PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING |
---|
| 42 | +PURGATORY_CFLAGS += -fno-stack-protector |
---|
30 | 43 | |
---|
31 | 44 | # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That |
---|
32 | 45 | # in turn leaves some undefined symbols like __fentry__ in purgatory and not |
---|
.. | .. |
---|
56 | 69 | CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE) |
---|
57 | 70 | CFLAGS_string.o += $(PURGATORY_CFLAGS) |
---|
58 | 71 | |
---|
| 72 | +asflags-remove-y += -g -Wa,-gdwarf-2 |
---|
| 73 | + |
---|
59 | 74 | $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE |
---|
| 75 | + $(call if_changed,ld) |
---|
| 76 | + |
---|
| 77 | +$(obj)/purgatory.chk: $(obj)/purgatory.ro FORCE |
---|
60 | 78 | $(call if_changed,ld) |
---|
61 | 79 | |
---|
62 | 80 | targets += kexec-purgatory.c |
---|
.. | .. |
---|
64 | 82 | quiet_cmd_bin2c = BIN2C $@ |
---|
65 | 83 | cmd_bin2c = $(objtree)/scripts/bin2c kexec_purgatory < $< > $@ |
---|
66 | 84 | |
---|
67 | | -$(obj)/kexec-purgatory.c: $(obj)/purgatory.ro FORCE |
---|
| 85 | +$(obj)/kexec-purgatory.c: $(obj)/purgatory.ro $(obj)/purgatory.chk FORCE |
---|
68 | 86 | $(call if_changed,bin2c) |
---|
69 | 87 | |
---|
70 | 88 | obj-$(CONFIG_KEXEC_FILE) += kexec-purgatory.o |
---|