162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci# 362306a36Sopenharmony_ci# Building a vDSO image for AArch64. 462306a36Sopenharmony_ci# 562306a36Sopenharmony_ci# Author: Will Deacon <will.deacon@arm.com> 662306a36Sopenharmony_ci# Heavily based on the vDSO Makefiles for other archs. 762306a36Sopenharmony_ci# 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci# Include the generic Makefile to check the built vdso. 1062306a36Sopenharmony_ciinclude $(srctree)/lib/vdso/Makefile 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciobj-vdso := vgettimeofday.o note.o sigreturn.o 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci# Build rules 1562306a36Sopenharmony_citargets := $(obj-vdso) vdso.so vdso.so.dbg 1662306a36Sopenharmony_ciobj-vdso := $(addprefix $(obj)/, $(obj-vdso)) 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cibtildflags-$(CONFIG_ARM64_BTI_KERNEL) += -z force-bti 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci# -Bsymbolic has been added for consistency with arm, the compat vDSO and 2162306a36Sopenharmony_ci# potential future proofing if we end up with internal calls to the exported 2262306a36Sopenharmony_ci# routines, as x86 does (see 6f121e548f83 ("x86, vdso: Reimplement vdso.so 2362306a36Sopenharmony_ci# preparation in build-time C")). 2462306a36Sopenharmony_cildflags-y := -shared -soname=linux-vdso.so.1 --hash-style=sysv \ 2562306a36Sopenharmony_ci -Bsymbolic --build-id=sha1 -n $(btildflags-y) 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciifdef CONFIG_LD_ORPHAN_WARN 2862306a36Sopenharmony_ci ldflags-y += --orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL) 2962306a36Sopenharmony_ciendif 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cildflags-y += -T 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciccflags-y := -fno-common -fno-builtin -fno-stack-protector -ffixed-x18 3462306a36Sopenharmony_ciccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci# -Wmissing-prototypes and -Wmissing-declarations are removed from 3762306a36Sopenharmony_ci# the CFLAGS of vgettimeofday.c to make possible to build the 3862306a36Sopenharmony_ci# kernel with CONFIG_WERROR enabled. 3962306a36Sopenharmony_ciCFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS) \ 4062306a36Sopenharmony_ci $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) \ 4162306a36Sopenharmony_ci $(CC_FLAGS_LTO) $(CC_FLAGS_CFI) \ 4262306a36Sopenharmony_ci -Wmissing-prototypes -Wmissing-declarations 4362306a36Sopenharmony_ciKASAN_SANITIZE := n 4462306a36Sopenharmony_ciKCSAN_SANITIZE := n 4562306a36Sopenharmony_ciUBSAN_SANITIZE := n 4662306a36Sopenharmony_ciOBJECT_FILES_NON_STANDARD := y 4762306a36Sopenharmony_ciKCOV_INSTRUMENT := n 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciCFLAGS_vgettimeofday.o = -O2 -mcmodel=tiny -fasynchronous-unwind-tables 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciifneq ($(c-gettimeofday-y),) 5262306a36Sopenharmony_ci CFLAGS_vgettimeofday.o += -include $(c-gettimeofday-y) 5362306a36Sopenharmony_ciendif 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci# Disable gcov profiling for VDSO code 5662306a36Sopenharmony_ciGCOV_PROFILE := n 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_citargets += vdso.lds 5962306a36Sopenharmony_ciCPPFLAGS_vdso.lds += -P -C -U$(ARCH) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci# Link rule for the .so file, .lds has to be first 6262306a36Sopenharmony_ci$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE 6362306a36Sopenharmony_ci $(call if_changed,vdsold_and_vdso_check) 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci# Strip rule for the .so file 6662306a36Sopenharmony_ci$(obj)/%.so: OBJCOPYFLAGS := -S 6762306a36Sopenharmony_ci$(obj)/%.so: $(obj)/%.so.dbg FORCE 6862306a36Sopenharmony_ci $(call if_changed,objcopy) 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci# Generate VDSO offsets using helper script 7162306a36Sopenharmony_cigen-vdsosym := $(srctree)/$(src)/gen_vdso_offsets.sh 7262306a36Sopenharmony_ciquiet_cmd_vdsosym = VDSOSYM $@ 7362306a36Sopenharmony_ci cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciinclude/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE 7662306a36Sopenharmony_ci $(call if_changed,vdsosym) 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci# Actual build commands 7962306a36Sopenharmony_ciquiet_cmd_vdsold_and_vdso_check = LD $@ 8062306a36Sopenharmony_ci cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check) 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci# Install commands for the unstripped file 8362306a36Sopenharmony_ciquiet_cmd_vdso_install = INSTALL $@ 8462306a36Sopenharmony_ci cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@ 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_civdso.so: $(obj)/vdso.so.dbg 8762306a36Sopenharmony_ci @mkdir -p $(MODLIB)/vdso 8862306a36Sopenharmony_ci $(call cmd,vdso_install) 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_civdso_install: vdso.so 91