2022-04-08 18:09:13 +08:00
# SPDX-License-Identifier: GPL-2.0
OBJECT_FILES_NON_STANDARD := y
purgatory-y := purgatory.o sha256.o entry.o string.o ctype.o memcpy.o memset.o
2023-01-13 22:23:00 +01:00
purgatory-y += strcmp.o strlen.o strncmp.o
2022-04-08 18:09:13 +08:00
targets += $( purgatory-y)
PURGATORY_OBJS = $( addprefix $( obj) /,$( purgatory-y) )
$(obj)/string.o : $( srctree ) /lib /string .c FORCE
$( call if_changed_rule,cc_o_c)
$(obj)/ctype.o : $( srctree ) /lib /ctype .c FORCE
$( call if_changed_rule,cc_o_c)
$(obj)/memcpy.o : $( srctree ) /arch /riscv /lib /memcpy .S FORCE
$( call if_changed_rule,as_o_S)
$(obj)/memset.o : $( srctree ) /arch /riscv /lib /memset .S FORCE
$( call if_changed_rule,as_o_S)
2023-01-13 22:23:00 +01:00
$(obj)/strcmp.o : $( srctree ) /arch /riscv /lib /strcmp .S FORCE
$( call if_changed_rule,as_o_S)
$(obj)/strlen.o : $( srctree ) /arch /riscv /lib /strlen .S FORCE
$( call if_changed_rule,as_o_S)
$(obj)/strncmp.o : $( srctree ) /arch /riscv /lib /strncmp .S FORCE
$( call if_changed_rule,as_o_S)
2022-04-08 18:09:13 +08:00
$(obj)/sha256.o : $( srctree ) /lib /crypto /sha 256.c FORCE
$( call if_changed_rule,cc_o_c)
2023-06-01 09:00:28 -07:00
CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
2022-04-08 18:09:13 +08:00
CFLAGS_string.o := -D__DISABLE_EXPORTS
CFLAGS_ctype.o := -D__DISABLE_EXPORTS
2023-05-19 16:47:39 +02:00
# When profile-guided optimization is enabled, llvm emits two different
# overlapping text sections, which is not supported by kexec. Remove profile
# optimization flags.
KBUILD_CFLAGS := $( filter-out -fprofile-sample-use= % -fprofile-use= %,$( KBUILD_CFLAGS) )
2022-04-08 18:09:13 +08:00
# When linking purgatory.ro with -r unresolved symbols are not checked,
# also link a purgatory.chk binary without -r to check for unresolved symbols.
PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
LDFLAGS_purgatory.ro := -r $( PURGATORY_LDFLAGS)
LDFLAGS_purgatory.chk := $( PURGATORY_LDFLAGS)
targets += purgatory.ro purgatory.chk
# Sanitizer, etc. runtimes are unavailable and cannot be linked here.
GCOV_PROFILE := n
KASAN_SANITIZE := n
UBSAN_SANITIZE := n
KCSAN_SANITIZE := n
KCOV_INSTRUMENT := n
# These are adjustments to the compiler flags used for objects that
# make up the standalone purgatory.ro
PURGATORY_CFLAGS_REMOVE := -mcmodel= kernel
PURGATORY_CFLAGS := -mcmodel= medany -ffreestanding -fno-zero-initialized-in-bss
PURGATORY_CFLAGS += $( DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
PURGATORY_CFLAGS += -fno-stack-protector -g0
# Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
# in turn leaves some undefined symbols like __fentry__ in purgatory and not
# sure how to relocate those.
i f d e f C O N F I G _ F U N C T I O N _ T R A C E R
PURGATORY_CFLAGS_REMOVE += $( CC_FLAGS_FTRACE)
e n d i f
i f d e f C O N F I G _ S T A C K P R O T E C T O R
PURGATORY_CFLAGS_REMOVE += -fstack-protector
e n d i f
i f d e f C O N F I G _ S T A C K P R O T E C T O R _ S T R O N G
PURGATORY_CFLAGS_REMOVE += -fstack-protector-strong
e n d i f
2023-07-10 18:35:50 +00:00
i f d e f C O N F I G _ C F I _ C L A N G
PURGATORY_CFLAGS_REMOVE += $( CC_FLAGS_CFI)
e n d i f
2022-04-08 18:09:13 +08:00
CFLAGS_REMOVE_purgatory.o += $( PURGATORY_CFLAGS_REMOVE)
CFLAGS_purgatory.o += $( PURGATORY_CFLAGS)
CFLAGS_REMOVE_sha256.o += $( PURGATORY_CFLAGS_REMOVE)
CFLAGS_sha256.o += $( PURGATORY_CFLAGS)
CFLAGS_REMOVE_string.o += $( PURGATORY_CFLAGS_REMOVE)
CFLAGS_string.o += $( PURGATORY_CFLAGS)
CFLAGS_REMOVE_ctype.o += $( PURGATORY_CFLAGS_REMOVE)
CFLAGS_ctype.o += $( PURGATORY_CFLAGS)
2023-03-26 18:21:21 +00:00
asflags-remove-y += $( foreach x, -g -gdwarf-4 -gdwarf-5, $( x) -Wa,$( x) )
2022-04-08 18:09:13 +08:00
$(obj)/purgatory.ro : $( PURGATORY_OBJS ) FORCE
$( call if_changed,ld)
$(obj)/purgatory.chk : $( obj ) /purgatory .ro FORCE
$( call if_changed,ld)
2022-06-26 07:34:37 +09:00
$(obj)/kexec-purgatory.o : $( obj ) /purgatory .ro $( obj ) /purgatory .chk
2022-04-08 18:09:13 +08:00
2022-06-26 07:34:36 +09:00
obj-y += kexec-purgatory.o