1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun# Absolute relocation type $(ARCH_REL_TYPE_ABS) needs to be defined before 4*4882a593Smuzhiyun# the inclusion of generic Makefile. 5*4882a593SmuzhiyunARCH_REL_TYPE_ABS := R_ARM_JUMP_SLOT|R_ARM_GLOB_DAT|R_ARM_ABS32 6*4882a593Smuzhiyuninclude $(srctree)/lib/vdso/Makefile 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunhostprogs := vdsomunge 9*4882a593Smuzhiyun 10*4882a593Smuzhiyunobj-vdso := vgettimeofday.o datapage.o note.o 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun# Build rules 13*4882a593Smuzhiyuntargets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds 14*4882a593Smuzhiyunobj-vdso := $(addprefix $(obj)/, $(obj-vdso)) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyunccflags-y := -fPIC -fno-common -fno-builtin -fno-stack-protector 17*4882a593Smuzhiyunccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO32 18*4882a593Smuzhiyun 19*4882a593Smuzhiyunldflags-$(CONFIG_CPU_ENDIAN_BE8) := --be8 20*4882a593Smuzhiyunldflags-y := -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \ 21*4882a593Smuzhiyun -z max-page-size=4096 -nostdlib -shared $(ldflags-y) \ 22*4882a593Smuzhiyun --hash-style=sysv --build-id=sha1 \ 23*4882a593Smuzhiyun -T 24*4882a593Smuzhiyun 25*4882a593Smuzhiyunobj-$(CONFIG_VDSO) += vdso.o 26*4882a593Smuzhiyunextra-$(CONFIG_VDSO) += vdso.lds 27*4882a593SmuzhiyunCPPFLAGS_vdso.lds += -P -C -U$(ARCH) 28*4882a593Smuzhiyun 29*4882a593SmuzhiyunCFLAGS_REMOVE_vdso.o = -pg 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun# Force -O2 to avoid libgcc dependencies 32*4882a593SmuzhiyunCFLAGS_REMOVE_vgettimeofday.o = -pg -Os $(GCC_PLUGINS_CFLAGS) 33*4882a593Smuzhiyunifeq ($(c-gettimeofday-y),) 34*4882a593SmuzhiyunCFLAGS_vgettimeofday.o = -O2 35*4882a593Smuzhiyunelse 36*4882a593SmuzhiyunCFLAGS_vgettimeofday.o = -O2 -include $(c-gettimeofday-y) 37*4882a593Smuzhiyunendif 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun# Disable gcov profiling for VDSO code 40*4882a593SmuzhiyunGCOV_PROFILE := n 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. 43*4882a593SmuzhiyunKCOV_INSTRUMENT := n 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun# Force dependency 46*4882a593Smuzhiyun$(obj)/vdso.o : $(obj)/vdso.so 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun# Link rule for the .so file 49*4882a593Smuzhiyun$(obj)/vdso.so.raw: $(obj)/vdso.lds $(obj-vdso) FORCE 50*4882a593Smuzhiyun $(call if_changed,vdsold_and_vdso_check) 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun$(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/vdsomunge FORCE 53*4882a593Smuzhiyun $(call if_changed,vdsomunge) 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun# Strip rule for the .so file 56*4882a593Smuzhiyun$(obj)/%.so: OBJCOPYFLAGS := -S 57*4882a593Smuzhiyun$(obj)/%.so: $(obj)/%.so.dbg FORCE 58*4882a593Smuzhiyun $(call if_changed,objcopy) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun# Actual build commands 61*4882a593Smuzhiyunquiet_cmd_vdsold_and_vdso_check = LD $@ 62*4882a593Smuzhiyun cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyunquiet_cmd_vdsomunge = MUNGE $@ 65*4882a593Smuzhiyun cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@ 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun# 68*4882a593Smuzhiyun# Install the unstripped copy of vdso.so.dbg. If our toolchain 69*4882a593Smuzhiyun# supports build-id, install .build-id links as well. 70*4882a593Smuzhiyun# 71*4882a593Smuzhiyun# Cribbed from arch/x86/vdso/Makefile. 72*4882a593Smuzhiyun# 73*4882a593Smuzhiyunquiet_cmd_vdso_install = INSTALL $< 74*4882a593Smuzhiyundefine cmd_vdso_install 75*4882a593Smuzhiyun cp $< "$(MODLIB)/vdso/vdso.so"; \ 76*4882a593Smuzhiyun if readelf -n $< | grep -q 'Build ID'; then \ 77*4882a593Smuzhiyun buildid=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \ 78*4882a593Smuzhiyun first=`echo $$buildid | cut -b-2`; \ 79*4882a593Smuzhiyun last=`echo $$buildid | cut -b3-`; \ 80*4882a593Smuzhiyun mkdir -p "$(MODLIB)/vdso/.build-id/$$first"; \ 81*4882a593Smuzhiyun ln -sf "../../vdso.so" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \ 82*4882a593Smuzhiyun fi 83*4882a593Smuzhiyunendef 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun$(MODLIB)/vdso: FORCE 86*4882a593Smuzhiyun @mkdir -p $(MODLIB)/vdso 87*4882a593Smuzhiyun 88*4882a593SmuzhiyunPHONY += vdso_install 89*4882a593Smuzhiyunvdso_install: $(obj)/vdso.so.dbg $(MODLIB)/vdso 90*4882a593Smuzhiyun $(call cmd,vdso_install) 91