1 # SPDX-License-Identifier: GPL-2.0
3 purgatory-y
:= purgatory.o sha256.o entry.o string.o ctype.o memcpy.o memset.o
4 ifeq ($(CONFIG_KASAN_GENERIC
)$(CONFIG_KASAN_SW_TAGS
),)
5 purgatory-y
+= strcmp.o strlen.o strncmp.o
8 targets
+= $(purgatory-y
)
9 PURGATORY_OBJS
= $(addprefix $(obj
)/,$(purgatory-y
))
11 $(obj
)/string.o
: $(srctree
)/lib
/string.c FORCE
12 $(call if_changed_rule
,cc_o_c
)
14 $(obj
)/ctype.o
: $(srctree
)/lib
/ctype.c FORCE
15 $(call if_changed_rule
,cc_o_c
)
17 $(obj
)/memcpy.o
: $(srctree
)/arch
/riscv
/lib
/memcpy.S FORCE
18 $(call if_changed_rule
,as_o_S
)
20 $(obj
)/memset.o
: $(srctree
)/arch
/riscv
/lib
/memset.S FORCE
21 $(call if_changed_rule
,as_o_S
)
23 $(obj
)/strcmp.o
: $(srctree
)/arch
/riscv
/lib
/strcmp.S FORCE
24 $(call if_changed_rule
,as_o_S
)
26 $(obj
)/strlen.o
: $(srctree
)/arch
/riscv
/lib
/strlen.S FORCE
27 $(call if_changed_rule
,as_o_S
)
29 $(obj
)/strncmp.o
: $(srctree
)/arch
/riscv
/lib
/strncmp.S FORCE
30 $(call if_changed_rule
,as_o_S
)
32 $(obj
)/sha256.o
: $(srctree
)/lib
/crypto
/sha256.c FORCE
33 $(call if_changed_rule
,cc_o_c
)
35 CFLAGS_sha256.o
:= -D__DISABLE_EXPORTS
-D__NO_FORTIFY
36 CFLAGS_string.o
:= -D__DISABLE_EXPORTS
37 CFLAGS_ctype.o
:= -D__DISABLE_EXPORTS
39 # When profile-guided optimization is enabled, llvm emits two different
40 # overlapping text sections, which is not supported by kexec. Remove profile
42 KBUILD_CFLAGS
:= $(filter-out -fprofile-sample-use
=% -fprofile-use
=%,$(KBUILD_CFLAGS
))
44 # When linking purgatory.ro with -r unresolved symbols are not checked,
45 # also link a purgatory.chk binary without -r to check for unresolved symbols.
46 PURGATORY_LDFLAGS
:= -e purgatory_start
-z nodefaultlib
47 LDFLAGS_purgatory.ro
:= -r
$(PURGATORY_LDFLAGS
)
48 LDFLAGS_purgatory.chk
:= $(PURGATORY_LDFLAGS
)
49 targets
+= purgatory.ro purgatory.chk
51 # These are adjustments to the compiler flags used for objects that
52 # make up the standalone purgatory.ro
54 PURGATORY_CFLAGS_REMOVE
:= -mcmodel
=kernel
55 PURGATORY_CFLAGS
:= -mcmodel
=medany
-ffreestanding
-fno-zero-initialized-in-bss
56 PURGATORY_CFLAGS
+= $(DISABLE_STACKLEAK_PLUGIN
) -DDISABLE_BRANCH_PROFILING
57 PURGATORY_CFLAGS
+= -fno-stack-protector
-g0
59 # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
60 # in turn leaves some undefined symbols like __fentry__ in purgatory and not
61 # sure how to relocate those.
62 ifdef CONFIG_FUNCTION_TRACER
63 PURGATORY_CFLAGS_REMOVE
+= $(CC_FLAGS_FTRACE
)
66 ifdef CONFIG_STACKPROTECTOR
67 PURGATORY_CFLAGS_REMOVE
+= -fstack-protector
70 ifdef CONFIG_STACKPROTECTOR_STRONG
71 PURGATORY_CFLAGS_REMOVE
+= -fstack-protector-strong
74 ifdef CONFIG_CFI_CLANG
75 PURGATORY_CFLAGS_REMOVE
+= $(CC_FLAGS_CFI
)
78 ifdef CONFIG_RELOCATABLE
79 PURGATORY_CFLAGS_REMOVE
+= -fPIE
82 ifdef CONFIG_SHADOW_CALL_STACK
83 PURGATORY_CFLAGS_REMOVE
+= $(CC_FLAGS_SCS
)
86 CFLAGS_REMOVE_purgatory.o
+= $(PURGATORY_CFLAGS_REMOVE
)
87 CFLAGS_purgatory.o
+= $(PURGATORY_CFLAGS
)
89 CFLAGS_REMOVE_sha256.o
+= $(PURGATORY_CFLAGS_REMOVE
)
90 CFLAGS_sha256.o
+= $(PURGATORY_CFLAGS
)
92 CFLAGS_REMOVE_string.o
+= $(PURGATORY_CFLAGS_REMOVE
)
93 CFLAGS_string.o
+= $(PURGATORY_CFLAGS
)
95 CFLAGS_REMOVE_ctype.o
+= $(PURGATORY_CFLAGS_REMOVE
)
96 CFLAGS_ctype.o
+= $(PURGATORY_CFLAGS
)
98 asflags-remove-y
+= $(foreach x
, -g
-gdwarf-4
-gdwarf-5
, $(x
) -Wa
,$(x
))
100 $(obj
)/purgatory.ro
: $(PURGATORY_OBJS
) FORCE
101 $(call if_changed
,ld)
103 $(obj
)/purgatory.chk
: $(obj
)/purgatory.ro FORCE
104 $(call if_changed
,ld)
106 $(obj
)/kexec-purgatory.o
: $(obj
)/purgatory.ro
$(obj
)/purgatory.chk
108 obj-y
+= kexec-purgatory.o