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