xref: /linux/arch/riscv/purgatory/Makefile (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
1736e30afSLi Zhengyu# SPDX-License-Identifier: GPL-2.0
2736e30afSLi Zhengyu
3736e30afSLi Zhengyupurgatory-y := purgatory.o sha256.o entry.o string.o ctype.o memcpy.o memset.o
4*58ff5371SSamuel Hollandifeq ($(CONFIG_KASAN_GENERIC)$(CONFIG_KASAN_SW_TAGS),)
556e0790cSHeiko Stuebnerpurgatory-y += strcmp.o strlen.o strncmp.o
6*58ff5371SSamuel Hollandendif
7736e30afSLi Zhengyu
8736e30afSLi Zhengyutargets += $(purgatory-y)
9736e30afSLi ZhengyuPURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y))
10736e30afSLi Zhengyu
11736e30afSLi Zhengyu$(obj)/string.o: $(srctree)/lib/string.c FORCE
12736e30afSLi Zhengyu	$(call if_changed_rule,cc_o_c)
13736e30afSLi Zhengyu
14736e30afSLi Zhengyu$(obj)/ctype.o: $(srctree)/lib/ctype.c FORCE
15736e30afSLi Zhengyu	$(call if_changed_rule,cc_o_c)
16736e30afSLi Zhengyu
17736e30afSLi Zhengyu$(obj)/memcpy.o: $(srctree)/arch/riscv/lib/memcpy.S FORCE
18736e30afSLi Zhengyu	$(call if_changed_rule,as_o_S)
19736e30afSLi Zhengyu
20736e30afSLi Zhengyu$(obj)/memset.o: $(srctree)/arch/riscv/lib/memset.S FORCE
21736e30afSLi Zhengyu	$(call if_changed_rule,as_o_S)
22736e30afSLi Zhengyu
2356e0790cSHeiko Stuebner$(obj)/strcmp.o: $(srctree)/arch/riscv/lib/strcmp.S FORCE
2456e0790cSHeiko Stuebner	$(call if_changed_rule,as_o_S)
2556e0790cSHeiko Stuebner
2656e0790cSHeiko Stuebner$(obj)/strlen.o: $(srctree)/arch/riscv/lib/strlen.S FORCE
2756e0790cSHeiko Stuebner	$(call if_changed_rule,as_o_S)
2856e0790cSHeiko Stuebner
2956e0790cSHeiko Stuebner$(obj)/strncmp.o: $(srctree)/arch/riscv/lib/strncmp.S FORCE
3056e0790cSHeiko Stuebner	$(call if_changed_rule,as_o_S)
3156e0790cSHeiko Stuebner
32736e30afSLi Zhengyu$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
33736e30afSLi Zhengyu	$(call if_changed_rule,cc_o_c)
34736e30afSLi Zhengyu
358762606aSKees CookCFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
36736e30afSLi ZhengyuCFLAGS_string.o := -D__DISABLE_EXPORTS
37736e30afSLi ZhengyuCFLAGS_ctype.o := -D__DISABLE_EXPORTS
38736e30afSLi Zhengyu
3988ac3bbcSRicardo Ribalda# When profile-guided optimization is enabled, llvm emits two different
4088ac3bbcSRicardo Ribalda# overlapping text sections, which is not supported by kexec. Remove profile
4188ac3bbcSRicardo Ribalda# optimization flags.
4288ac3bbcSRicardo RibaldaKBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS))
4388ac3bbcSRicardo Ribalda
44736e30afSLi Zhengyu# When linking purgatory.ro with -r unresolved symbols are not checked,
45736e30afSLi Zhengyu# also link a purgatory.chk binary without -r to check for unresolved symbols.
46736e30afSLi ZhengyuPURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
47736e30afSLi ZhengyuLDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS)
48736e30afSLi ZhengyuLDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS)
49736e30afSLi Zhengyutargets += purgatory.ro purgatory.chk
50736e30afSLi Zhengyu
51736e30afSLi Zhengyu# These are adjustments to the compiler flags used for objects that
52736e30afSLi Zhengyu# make up the standalone purgatory.ro
53736e30afSLi Zhengyu
54736e30afSLi ZhengyuPURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
55736e30afSLi ZhengyuPURGATORY_CFLAGS := -mcmodel=medany -ffreestanding -fno-zero-initialized-in-bss
56736e30afSLi ZhengyuPURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
57736e30afSLi ZhengyuPURGATORY_CFLAGS += -fno-stack-protector -g0
58736e30afSLi Zhengyu
59736e30afSLi Zhengyu# Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
60736e30afSLi Zhengyu# in turn leaves some undefined symbols like __fentry__ in purgatory and not
61736e30afSLi Zhengyu# sure how to relocate those.
62736e30afSLi Zhengyuifdef CONFIG_FUNCTION_TRACER
63736e30afSLi ZhengyuPURGATORY_CFLAGS_REMOVE		+= $(CC_FLAGS_FTRACE)
64736e30afSLi Zhengyuendif
65736e30afSLi Zhengyu
66736e30afSLi Zhengyuifdef CONFIG_STACKPROTECTOR
67736e30afSLi ZhengyuPURGATORY_CFLAGS_REMOVE		+= -fstack-protector
68736e30afSLi Zhengyuendif
69736e30afSLi Zhengyu
70736e30afSLi Zhengyuifdef CONFIG_STACKPROTECTOR_STRONG
71736e30afSLi ZhengyuPURGATORY_CFLAGS_REMOVE		+= -fstack-protector-strong
72736e30afSLi Zhengyuendif
73736e30afSLi Zhengyu
74a72ab036SSami Tolvanenifdef CONFIG_CFI_CLANG
75a72ab036SSami TolvanenPURGATORY_CFLAGS_REMOVE		+= $(CC_FLAGS_CFI)
76a72ab036SSami Tolvanenendif
77a72ab036SSami Tolvanen
780f5f46a8SSong Shuaiifdef CONFIG_RELOCATABLE
790f5f46a8SSong ShuaiPURGATORY_CFLAGS_REMOVE		+= -fPIE
800f5f46a8SSong Shuaiendif
810f5f46a8SSong Shuai
82d1584d79SSami Tolvanenifdef CONFIG_SHADOW_CALL_STACK
83d1584d79SSami TolvanenPURGATORY_CFLAGS_REMOVE		+= $(CC_FLAGS_SCS)
84d1584d79SSami Tolvanenendif
85d1584d79SSami Tolvanen
86736e30afSLi ZhengyuCFLAGS_REMOVE_purgatory.o	+= $(PURGATORY_CFLAGS_REMOVE)
87736e30afSLi ZhengyuCFLAGS_purgatory.o		+= $(PURGATORY_CFLAGS)
88736e30afSLi Zhengyu
89736e30afSLi ZhengyuCFLAGS_REMOVE_sha256.o		+= $(PURGATORY_CFLAGS_REMOVE)
90736e30afSLi ZhengyuCFLAGS_sha256.o			+= $(PURGATORY_CFLAGS)
91736e30afSLi Zhengyu
92736e30afSLi ZhengyuCFLAGS_REMOVE_string.o		+= $(PURGATORY_CFLAGS_REMOVE)
93736e30afSLi ZhengyuCFLAGS_string.o			+= $(PURGATORY_CFLAGS)
94736e30afSLi Zhengyu
95736e30afSLi ZhengyuCFLAGS_REMOVE_ctype.o		+= $(PURGATORY_CFLAGS_REMOVE)
96736e30afSLi ZhengyuCFLAGS_ctype.o			+= $(PURGATORY_CFLAGS)
97736e30afSLi Zhengyu
98d83806c4SAlyssa Rossasflags-remove-y		+= $(foreach x, -g -gdwarf-4 -gdwarf-5, $(x) -Wa,$(x))
99736e30afSLi Zhengyu
100736e30afSLi Zhengyu$(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE
101736e30afSLi Zhengyu		$(call if_changed,ld)
102736e30afSLi Zhengyu
103736e30afSLi Zhengyu$(obj)/purgatory.chk: $(obj)/purgatory.ro FORCE
104736e30afSLi Zhengyu		$(call if_changed,ld)
105736e30afSLi Zhengyu
106d8357e3bSMasahiro Yamada$(obj)/kexec-purgatory.o: $(obj)/purgatory.ro $(obj)/purgatory.chk
107736e30afSLi Zhengyu
108788177e7SMasahiro Yamadaobj-y += kexec-purgatory.o
109