18512287aSNathan Lynchhostprogs-y := vdsomunge 28512287aSNathan Lynch 38512287aSNathan Lynchobj-vdso := vgettimeofday.o datapage.o 48512287aSNathan Lynch 58512287aSNathan Lynch# Build rules 68512287aSNathan Lynchtargets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds 78512287aSNathan Lynchobj-vdso := $(addprefix $(obj)/, $(obj-vdso)) 88512287aSNathan Lynch 98512287aSNathan Lynchccflags-y := -shared -fPIC -fno-common -fno-builtin -fno-stack-protector 108512287aSNathan Lynchccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 -DDISABLE_BRANCH_PROFILING 118512287aSNathan Lynchccflags-y += -Wl,--no-undefined $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) 128512287aSNathan Lynch 13*f80f6531SNathan Lynchobj-$(CONFIG_VDSO) += vdso.o 14*f80f6531SNathan Lynchextra-$(CONFIG_VDSO) += vdso.lds 158512287aSNathan LynchCPPFLAGS_vdso.lds += -P -C -U$(ARCH) 168512287aSNathan Lynch 178512287aSNathan LynchCFLAGS_REMOVE_vdso.o = -pg 188512287aSNathan Lynch 198512287aSNathan Lynch# Force -O2 to avoid libgcc dependencies 208512287aSNathan LynchCFLAGS_REMOVE_vgettimeofday.o = -pg -Os 218512287aSNathan LynchCFLAGS_vgettimeofday.o = -O2 228512287aSNathan Lynch 238512287aSNathan Lynch# Disable gcov profiling for VDSO code 248512287aSNathan LynchGCOV_PROFILE := n 258512287aSNathan Lynch 268512287aSNathan Lynch# Force dependency 278512287aSNathan Lynch$(obj)/vdso.o : $(obj)/vdso.so 288512287aSNathan Lynch 298512287aSNathan Lynch# Link rule for the .so file 308512287aSNathan Lynch$(obj)/vdso.so.raw: $(src)/vdso.lds $(obj-vdso) FORCE 318512287aSNathan Lynch $(call if_changed,vdsold) 328512287aSNathan Lynch 338512287aSNathan Lynch$(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/vdsomunge FORCE 348512287aSNathan Lynch $(call if_changed,vdsomunge) 358512287aSNathan Lynch 368512287aSNathan Lynch# Strip rule for the .so file 378512287aSNathan Lynch$(obj)/%.so: OBJCOPYFLAGS := -S 388512287aSNathan Lynch$(obj)/%.so: $(obj)/%.so.dbg FORCE 398512287aSNathan Lynch $(call if_changed,objcopy) 408512287aSNathan Lynch 418512287aSNathan Lynch# Actual build commands 428512287aSNathan Lynchquiet_cmd_vdsold = VDSO $@ 438512287aSNathan Lynch cmd_vdsold = $(CC) $(c_flags) -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) \ 448512287aSNathan Lynch $(call cc-ldoption, -Wl$(comma)--build-id) \ 458512287aSNathan Lynch -Wl,-Bsymbolic -Wl,-z,max-page-size=4096 \ 468512287aSNathan Lynch -Wl,-z,common-page-size=4096 -o $@ 478512287aSNathan Lynch 488512287aSNathan Lynchquiet_cmd_vdsomunge = MUNGE $@ 498512287aSNathan Lynch cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@ 508512287aSNathan Lynch 518512287aSNathan Lynch# 528512287aSNathan Lynch# Install the unstripped copy of vdso.so.dbg. If our toolchain 538512287aSNathan Lynch# supports build-id, install .build-id links as well. 548512287aSNathan Lynch# 558512287aSNathan Lynch# Cribbed from arch/x86/vdso/Makefile. 568512287aSNathan Lynch# 578512287aSNathan Lynchquiet_cmd_vdso_install = INSTALL $< 588512287aSNathan Lynchdefine cmd_vdso_install 598512287aSNathan Lynch cp $< "$(MODLIB)/vdso/vdso.so"; \ 608512287aSNathan Lynch if readelf -n $< | grep -q 'Build ID'; then \ 618512287aSNathan Lynch buildid=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \ 628512287aSNathan Lynch first=`echo $$buildid | cut -b-2`; \ 638512287aSNathan Lynch last=`echo $$buildid | cut -b3-`; \ 648512287aSNathan Lynch mkdir -p "$(MODLIB)/vdso/.build-id/$$first"; \ 658512287aSNathan Lynch ln -sf "../../vdso.so" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \ 668512287aSNathan Lynch fi 678512287aSNathan Lynchendef 688512287aSNathan Lynch 698512287aSNathan Lynch$(MODLIB)/vdso: FORCE 708512287aSNathan Lynch @mkdir -p $(MODLIB)/vdso 718512287aSNathan Lynch 728512287aSNathan LynchPHONY += vdso_install 738512287aSNathan Lynchvdso_install: $(obj)/vdso.so.dbg $(MODLIB)/vdso FORCE 748512287aSNathan Lynch $(call cmd,vdso_install) 75