18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci 38c2ecf20Sopenharmony_ci# Absolute relocation type $(ARCH_REL_TYPE_ABS) needs to be defined before 48c2ecf20Sopenharmony_ci# the inclusion of generic Makefile. 58c2ecf20Sopenharmony_ciARCH_REL_TYPE_ABS := R_ARM_JUMP_SLOT|R_ARM_GLOB_DAT|R_ARM_ABS32 68c2ecf20Sopenharmony_ciinclude $(srctree)/lib/vdso/Makefile 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cihostprogs := vdsomunge 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ciobj-vdso := vgettimeofday.o datapage.o note.o 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci# Build rules 138c2ecf20Sopenharmony_citargets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds 148c2ecf20Sopenharmony_ciobj-vdso := $(addprefix $(obj)/, $(obj-vdso)) 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ciccflags-y := -fPIC -fno-common -fno-builtin -fno-stack-protector 178c2ecf20Sopenharmony_ciccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO32 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cildflags-$(CONFIG_CPU_ENDIAN_BE8) := --be8 208c2ecf20Sopenharmony_cildflags-y := -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \ 218c2ecf20Sopenharmony_ci -z max-page-size=4096 -nostdlib -shared $(ldflags-y) \ 228c2ecf20Sopenharmony_ci --hash-style=sysv --build-id=sha1 \ 238c2ecf20Sopenharmony_ci -T 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ciobj-$(CONFIG_VDSO) += vdso.o 268c2ecf20Sopenharmony_ciextra-$(CONFIG_VDSO) += vdso.lds 278c2ecf20Sopenharmony_ciCPPFLAGS_vdso.lds += -P -C -U$(ARCH) 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ciCFLAGS_REMOVE_vdso.o = -pg 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci# Force -O2 to avoid libgcc dependencies 328c2ecf20Sopenharmony_ciCFLAGS_REMOVE_vgettimeofday.o = -pg -Os $(GCC_PLUGINS_CFLAGS) 338c2ecf20Sopenharmony_ciifeq ($(c-gettimeofday-y),) 348c2ecf20Sopenharmony_ciCFLAGS_vgettimeofday.o = -O2 358c2ecf20Sopenharmony_cielse 368c2ecf20Sopenharmony_ciCFLAGS_vgettimeofday.o = -O2 -include $(c-gettimeofday-y) 378c2ecf20Sopenharmony_ciendif 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci# Disable gcov profiling for VDSO code 408c2ecf20Sopenharmony_ciGCOV_PROFILE := n 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. 438c2ecf20Sopenharmony_ciKCOV_INSTRUMENT := n 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ciKASAN_SANITIZE := n 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci# Force dependency 488c2ecf20Sopenharmony_ci$(obj)/vdso.o : $(obj)/vdso.so 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci# Link rule for the .so file 518c2ecf20Sopenharmony_ci$(obj)/vdso.so.raw: $(obj)/vdso.lds $(obj-vdso) FORCE 528c2ecf20Sopenharmony_ci $(call if_changed,vdsold_and_vdso_check) 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci$(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/vdsomunge FORCE 558c2ecf20Sopenharmony_ci $(call if_changed,vdsomunge) 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci# Strip rule for the .so file 588c2ecf20Sopenharmony_ci$(obj)/%.so: OBJCOPYFLAGS := -S 598c2ecf20Sopenharmony_ci$(obj)/%.so: $(obj)/%.so.dbg FORCE 608c2ecf20Sopenharmony_ci $(call if_changed,objcopy) 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci# Actual build commands 638c2ecf20Sopenharmony_ciquiet_cmd_vdsold_and_vdso_check = LD $@ 648c2ecf20Sopenharmony_ci cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check) 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ciquiet_cmd_vdsomunge = MUNGE $@ 678c2ecf20Sopenharmony_ci cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@ 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci# 708c2ecf20Sopenharmony_ci# Install the unstripped copy of vdso.so.dbg. If our toolchain 718c2ecf20Sopenharmony_ci# supports build-id, install .build-id links as well. 728c2ecf20Sopenharmony_ci# 738c2ecf20Sopenharmony_ci# Cribbed from arch/x86/vdso/Makefile. 748c2ecf20Sopenharmony_ci# 758c2ecf20Sopenharmony_ciquiet_cmd_vdso_install = INSTALL $< 768c2ecf20Sopenharmony_cidefine cmd_vdso_install 778c2ecf20Sopenharmony_ci cp $< "$(MODLIB)/vdso/vdso.so"; \ 788c2ecf20Sopenharmony_ci if readelf -n $< | grep -q 'Build ID'; then \ 798c2ecf20Sopenharmony_ci buildid=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \ 808c2ecf20Sopenharmony_ci first=`echo $$buildid | cut -b-2`; \ 818c2ecf20Sopenharmony_ci last=`echo $$buildid | cut -b3-`; \ 828c2ecf20Sopenharmony_ci mkdir -p "$(MODLIB)/vdso/.build-id/$$first"; \ 838c2ecf20Sopenharmony_ci ln -sf "../../vdso.so" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \ 848c2ecf20Sopenharmony_ci fi 858c2ecf20Sopenharmony_ciendef 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci$(MODLIB)/vdso: FORCE 888c2ecf20Sopenharmony_ci @mkdir -p $(MODLIB)/vdso 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ciPHONY += vdso_install 918c2ecf20Sopenharmony_civdso_install: $(obj)/vdso.so.dbg $(MODLIB)/vdso 928c2ecf20Sopenharmony_ci $(call cmd,vdso_install) 93