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