arch/riscv/purgatory/Makefile

Source file repositories/reference/linux-study-clean/arch/riscv/purgatory/Makefile

File Facts

System
Linux kernel
Corpus path
arch/riscv/purgatory/Makefile
Extension
[no extension]
Size
3743 bytes
Lines
118
Domain
Architecture Layer
Bucket
arch/riscv
Inferred role
Architecture Layer: build/configuration rule
Status
atlas-only

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

# SPDX-License-Identifier: GPL-2.0

purgatory-y := purgatory.o sha256.o entry.o string.o ctype.o memcpy.o memset.o
ifeq ($(CONFIG_KASAN_GENERIC)$(CONFIG_KASAN_SW_TAGS),)
purgatory-y += strcmp.o strlen.o strncmp.o strnlen.o strchr.o strrchr.o
endif

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)

$(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)

$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
	$(call if_changed_rule,cc_o_c)

$(obj)/strnlen.o: $(srctree)/arch/riscv/lib/strnlen.S FORCE
	$(call if_changed_rule,as_o_S)

$(obj)/strchr.o: $(srctree)/arch/riscv/lib/strchr.S FORCE
	$(call if_changed_rule,as_o_S)

$(obj)/strrchr.o: $(srctree)/arch/riscv/lib/strrchr.S FORCE
	$(call if_changed_rule,as_o_S)

CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
CFLAGS_string.o := -D__DISABLE_EXPORTS
CFLAGS_ctype.o := -D__DISABLE_EXPORTS

# 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))

# 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

# 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_KSTACK_ERASE) -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.

Annotation

Implementation Notes