Greg Kroah-Hartman | b244131 | 2017-11-01 15:07:57 +0100 | [diff] [blame] | 1 | # SPDX-License-Identifier: GPL-2.0 |
Josh Poimboeuf | c0dd671686 | 2016-02-28 22:22:34 -0600 | [diff] [blame] | 2 | OBJECT_FILES_NON_STANDARD := y |
| 3 | |
Vivek Goyal | 8fc5b4d | 2014-08-08 14:26:02 -0700 | [diff] [blame] | 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 | |
Nick Desaulniers | 4ce9731 | 2019-08-07 15:15:32 -0700 | [diff] [blame] | 9 | $(obj)/string.o: $(srctree)/arch/x86/boot/compressed/string.c FORCE |
| 10 | $(call if_changed_rule,cc_o_c) |
| 11 | |
Philipp Rudo | fa8cbda | 2018-07-13 16:59:09 -0700 | [diff] [blame] | 12 | $(obj)/sha256.o: $(srctree)/lib/sha256.c FORCE |
Philipp Rudo | df6f280 | 2018-04-13 15:36:46 -0700 | [diff] [blame] | 13 | $(call if_changed_rule,cc_o_c) |
| 14 | |
Vivek Goyal | 8fc5b4d | 2014-08-08 14:26:02 -0700 | [diff] [blame] | 15 | LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined -nostdlib -z nodefaultlib |
| 16 | targets += purgatory.ro |
| 17 | |
Mike Galbraith | 13a6798e | 2017-03-31 15:12:12 -0700 | [diff] [blame] | 18 | KASAN_SANITIZE := n |
Emese Revfy | 543c37c | 2016-05-24 00:11:37 +0200 | [diff] [blame] | 19 | KCOV_INSTRUMENT := n |
| 20 | |
Steve Wahl | e16c298 | 2019-09-05 15:23:46 -0500 | [diff] [blame] | 21 | # These are adjustments to the compiler flags used for objects that |
| 22 | # make up the standalone purgatory.ro |
| 23 | |
| 24 | PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel |
| 25 | PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss |
| 26 | |
Vivek Goyal | 8fc5b4d | 2014-08-08 14:26:02 -0700 | [diff] [blame] | 27 | # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That |
| 28 | # in turn leaves some undefined symbols like __fentry__ in purgatory and not |
Nick Desaulniers | b059f80 | 2019-08-07 15:15:33 -0700 | [diff] [blame] | 29 | # sure how to relocate those. |
| 30 | ifdef CONFIG_FUNCTION_TRACER |
Steve Wahl | e16c298 | 2019-09-05 15:23:46 -0500 | [diff] [blame] | 31 | PURGATORY_CFLAGS_REMOVE += $(CC_FLAGS_FTRACE) |
Nick Desaulniers | b059f80 | 2019-08-07 15:15:33 -0700 | [diff] [blame] | 32 | endif |
Vivek Goyal | 8fc5b4d | 2014-08-08 14:26:02 -0700 | [diff] [blame] | 33 | |
Nick Desaulniers | b059f80 | 2019-08-07 15:15:33 -0700 | [diff] [blame] | 34 | ifdef CONFIG_STACKPROTECTOR |
Steve Wahl | e16c298 | 2019-09-05 15:23:46 -0500 | [diff] [blame] | 35 | PURGATORY_CFLAGS_REMOVE += -fstack-protector |
Nick Desaulniers | b059f80 | 2019-08-07 15:15:33 -0700 | [diff] [blame] | 36 | endif |
| 37 | |
| 38 | ifdef CONFIG_STACKPROTECTOR_STRONG |
Steve Wahl | e16c298 | 2019-09-05 15:23:46 -0500 | [diff] [blame] | 39 | PURGATORY_CFLAGS_REMOVE += -fstack-protector-strong |
Nick Desaulniers | b059f80 | 2019-08-07 15:15:33 -0700 | [diff] [blame] | 40 | endif |
| 41 | |
| 42 | ifdef CONFIG_RETPOLINE |
Steve Wahl | e16c298 | 2019-09-05 15:23:46 -0500 | [diff] [blame] | 43 | PURGATORY_CFLAGS_REMOVE += $(RETPOLINE_CFLAGS) |
Nick Desaulniers | b059f80 | 2019-08-07 15:15:33 -0700 | [diff] [blame] | 44 | endif |
Vivek Goyal | 8fc5b4d | 2014-08-08 14:26:02 -0700 | [diff] [blame] | 45 | |
Steve Wahl | e16c298 | 2019-09-05 15:23:46 -0500 | [diff] [blame] | 46 | CFLAGS_REMOVE_purgatory.o += $(PURGATORY_CFLAGS_REMOVE) |
| 47 | CFLAGS_purgatory.o += $(PURGATORY_CFLAGS) |
| 48 | |
| 49 | CFLAGS_REMOVE_sha256.o += $(PURGATORY_CFLAGS_REMOVE) |
| 50 | CFLAGS_sha256.o += $(PURGATORY_CFLAGS) |
| 51 | |
| 52 | CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE) |
| 53 | CFLAGS_string.o += $(PURGATORY_CFLAGS) |
| 54 | |
Vivek Goyal | 8fc5b4d | 2014-08-08 14:26:02 -0700 | [diff] [blame] | 55 | $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE |
| 56 | $(call if_changed,ld) |
| 57 | |
| 58 | targets += kexec-purgatory.c |
| 59 | |
| 60 | quiet_cmd_bin2c = BIN2C $@ |
Masahiro Yamada | c417fbc | 2018-06-26 01:40:23 +0900 | [diff] [blame] | 61 | cmd_bin2c = $(objtree)/scripts/bin2c kexec_purgatory < $< > $@ |
Vivek Goyal | 8fc5b4d | 2014-08-08 14:26:02 -0700 | [diff] [blame] | 62 | |
| 63 | $(obj)/kexec-purgatory.c: $(obj)/purgatory.ro FORCE |
| 64 | $(call if_changed,bin2c) |
Vivek Goyal | 8fc5b4d | 2014-08-08 14:26:02 -0700 | [diff] [blame] | 65 | |
Vivek Goyal | 74ca317 | 2014-08-29 15:18:46 -0700 | [diff] [blame] | 66 | obj-$(CONFIG_KEXEC_FILE) += kexec-purgatory.o |