1 # SPDX-License-Identifier: GPL-2.0
2 OBJECT_FILES_NON_STANDARD
:= y
4 purgatory-y
:= purgatory.o stack.o setup-x86_
$(BITS
).o sha256.o entry64.o string.o
6 targets
+= $(purgatory-y
)
7 PURGATORY_OBJS
= $(addprefix $(obj
)/,$(purgatory-y
))
9 $(obj
)/string.o
: $(srctree
)/arch
/x86
/boot
/compressed
/string.c FORCE
10 $(call if_changed_rule
,cc_o_c
)
12 $(obj
)/sha256.o
: $(srctree
)/lib
/crypto
/sha256.c FORCE
13 $(call if_changed_rule
,cc_o_c
)
15 CFLAGS_sha256.o
:= -D__DISABLE_EXPORTS
17 # When linking purgatory.ro with -r unresolved symbols are not checked,
18 # also link a purgatory.chk binary without -r to check for unresolved symbols.
19 PURGATORY_LDFLAGS
:= -e purgatory_start
-nostdlib
-z nodefaultlib
20 LDFLAGS_purgatory.ro
:= -r
$(PURGATORY_LDFLAGS
)
21 LDFLAGS_purgatory.chk
:= $(PURGATORY_LDFLAGS
)
22 targets
+= purgatory.ro purgatory.chk
24 # Sanitizer, etc. runtimes are unavailable and cannot be linked here.
31 # These are adjustments to the compiler flags used for objects that
32 # make up the standalone purgatory.ro
34 PURGATORY_CFLAGS_REMOVE
:= -mcmodel
=kernel
35 PURGATORY_CFLAGS
:= -mcmodel
=large
-ffreestanding
-fno-zero-initialized-in-bss
-g0
36 PURGATORY_CFLAGS
+= $(DISABLE_STACKLEAK_PLUGIN
) -DDISABLE_BRANCH_PROFILING
37 PURGATORY_CFLAGS
+= -fno-stack-protector
39 # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
40 # in turn leaves some undefined symbols like __fentry__ in purgatory and not
41 # sure how to relocate those.
42 ifdef CONFIG_FUNCTION_TRACER
43 PURGATORY_CFLAGS_REMOVE
+= $(CC_FLAGS_FTRACE
)
46 ifdef CONFIG_STACKPROTECTOR
47 PURGATORY_CFLAGS_REMOVE
+= -fstack-protector
50 ifdef CONFIG_STACKPROTECTOR_STRONG
51 PURGATORY_CFLAGS_REMOVE
+= -fstack-protector-strong
54 ifdef CONFIG_RETPOLINE
55 PURGATORY_CFLAGS_REMOVE
+= $(RETPOLINE_CFLAGS
)
58 CFLAGS_REMOVE_purgatory.o
+= $(PURGATORY_CFLAGS_REMOVE
)
59 CFLAGS_purgatory.o
+= $(PURGATORY_CFLAGS
)
61 CFLAGS_REMOVE_sha256.o
+= $(PURGATORY_CFLAGS_REMOVE
)
62 CFLAGS_sha256.o
+= $(PURGATORY_CFLAGS
)
64 CFLAGS_REMOVE_string.o
+= $(PURGATORY_CFLAGS_REMOVE
)
65 CFLAGS_string.o
+= $(PURGATORY_CFLAGS
)
67 AFLAGS_REMOVE_setup-x86_
$(BITS
).o
+= -Wa
,-gdwarf-2
68 AFLAGS_REMOVE_entry64.o
+= -Wa
,-gdwarf-2
70 $(obj
)/purgatory.ro
: $(PURGATORY_OBJS
) FORCE
73 $(obj
)/purgatory.chk
: $(obj
)/purgatory.ro FORCE
76 targets
+= kexec-purgatory.c
78 quiet_cmd_bin2c
= BIN2C
$@
79 cmd_bin2c
= $(objtree
)/scripts
/bin2c kexec_purgatory
< $< > $@
81 $(obj
)/kexec-purgatory.c
: $(obj
)/purgatory.ro
$(obj
)/purgatory.chk FORCE
82 $(call if_changed
,bin2c
)
84 obj-
$(CONFIG_KEXEC_FILE
) += kexec-purgatory.o