xref: /linux/arch/arm/vdso/Makefile (revision f80f6531b47c538b69769ada5e9fbacad085b34d)
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