162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci# Include the generic Makefile to check the built vdso. 462306a36Sopenharmony_ciinclude $(srctree)/lib/vdso/Makefile 562306a36Sopenharmony_ci 662306a36Sopenharmony_cihostprogs := vdsomunge 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciobj-vdso := vgettimeofday.o datapage.o note.o 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci# Build rules 1162306a36Sopenharmony_citargets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds 1262306a36Sopenharmony_ciobj-vdso := $(addprefix $(obj)/, $(obj-vdso)) 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciccflags-y := -fPIC -fno-common -fno-builtin -fno-stack-protector 1562306a36Sopenharmony_ciccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO32 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cildflags-$(CONFIG_CPU_ENDIAN_BE8) := --be8 1862306a36Sopenharmony_cildflags-y := -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \ 1962306a36Sopenharmony_ci -z max-page-size=4096 -shared $(ldflags-y) \ 2062306a36Sopenharmony_ci --hash-style=sysv --build-id=sha1 \ 2162306a36Sopenharmony_ci -T 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ciobj-$(CONFIG_VDSO) += vdso.o 2462306a36Sopenharmony_ciCPPFLAGS_vdso.lds += -P -C -U$(ARCH) 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ciCFLAGS_REMOVE_vdso.o = -pg 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci# Force -O2 to avoid libgcc dependencies 2962306a36Sopenharmony_ciCFLAGS_REMOVE_vgettimeofday.o = -pg -Os $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) 3062306a36Sopenharmony_ciifeq ($(c-gettimeofday-y),) 3162306a36Sopenharmony_ciCFLAGS_vgettimeofday.o = -O2 3262306a36Sopenharmony_cielse 3362306a36Sopenharmony_ciCFLAGS_vgettimeofday.o = -O2 -include $(c-gettimeofday-y) 3462306a36Sopenharmony_ciendif 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci# Disable gcov profiling for VDSO code 3762306a36Sopenharmony_ciGCOV_PROFILE := n 3862306a36Sopenharmony_ciUBSAN_SANITIZE := n 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. 4162306a36Sopenharmony_ciKCOV_INSTRUMENT := n 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciKASAN_SANITIZE := n 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci# Force dependency 4662306a36Sopenharmony_ci$(obj)/vdso.o : $(obj)/vdso.so 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci# Link rule for the .so file 4962306a36Sopenharmony_ci$(obj)/vdso.so.raw: $(obj)/vdso.lds $(obj-vdso) FORCE 5062306a36Sopenharmony_ci $(call if_changed,vdsold_and_vdso_check) 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci$(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/vdsomunge FORCE 5362306a36Sopenharmony_ci $(call if_changed,vdsomunge) 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci# Strip rule for the .so file 5662306a36Sopenharmony_ci$(obj)/%.so: OBJCOPYFLAGS := -S 5762306a36Sopenharmony_ci$(obj)/%.so: $(obj)/%.so.dbg FORCE 5862306a36Sopenharmony_ci $(call if_changed,objcopy) 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci# Actual build commands 6162306a36Sopenharmony_ciquiet_cmd_vdsold_and_vdso_check = LD $@ 6262306a36Sopenharmony_ci cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check) 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ciquiet_cmd_vdsomunge = MUNGE $@ 6562306a36Sopenharmony_ci cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@ 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci# 6862306a36Sopenharmony_ci# Install the unstripped copy of vdso.so.dbg. If our toolchain 6962306a36Sopenharmony_ci# supports build-id, install .build-id links as well. 7062306a36Sopenharmony_ci# 7162306a36Sopenharmony_ci# Cribbed from arch/x86/vdso/Makefile. 7262306a36Sopenharmony_ci# 7362306a36Sopenharmony_ciquiet_cmd_vdso_install = INSTALL $< 7462306a36Sopenharmony_cidefine cmd_vdso_install 7562306a36Sopenharmony_ci cp $< "$(MODLIB)/vdso/vdso.so"; \ 7662306a36Sopenharmony_ci if readelf -n $< | grep -q 'Build ID'; then \ 7762306a36Sopenharmony_ci buildid=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \ 7862306a36Sopenharmony_ci first=`echo $$buildid | cut -b-2`; \ 7962306a36Sopenharmony_ci last=`echo $$buildid | cut -b3-`; \ 8062306a36Sopenharmony_ci mkdir -p "$(MODLIB)/vdso/.build-id/$$first"; \ 8162306a36Sopenharmony_ci ln -sf "../../vdso.so" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \ 8262306a36Sopenharmony_ci fi 8362306a36Sopenharmony_ciendef 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci$(MODLIB)/vdso: FORCE 8662306a36Sopenharmony_ci @mkdir -p $(MODLIB)/vdso 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ciPHONY += vdso_install 8962306a36Sopenharmony_civdso_install: $(obj)/vdso.so.dbg $(MODLIB)/vdso 9062306a36Sopenharmony_ci $(call cmd,vdso_install) 91