| .. | .. |
|---|
| 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 |
|---|