162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#
362306a36Sopenharmony_ci# Building vDSO images for x86.
462306a36Sopenharmony_ci#
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci# do not instrument on vdso because KASAN is not compatible with user mode
762306a36Sopenharmony_ciKASAN_SANITIZE			:= n
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
1062306a36Sopenharmony_ciKCOV_INSTRUMENT                := n
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciVDSO64-y		:= y
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_civdso-install-$(VDSO64-y)	+= vdso.so
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci# files to link into the vdso
1862306a36Sopenharmony_civobjs-y := vdso-note.o um_vdso.o
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci# files to link into kernel
2162306a36Sopenharmony_ciobj-$(VDSO64-y)			+= vdso.o vma.o
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_civobjs := $(foreach F,$(vobjs-y),$(obj)/$F)
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci$(obj)/vdso.o: $(obj)/vdso.so
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_citargets += vdso.so vdso.so.dbg vdso.lds $(vobjs-y)
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciCPPFLAGS_vdso.lds += -P -C
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciVDSO_LDFLAGS_vdso.lds = -m64 -Wl,-soname=linux-vdso.so.1 \
3262306a36Sopenharmony_ci       -Wl,-z,max-page-size=4096
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci$(obj)/vdso.o: $(src)/vdso.S $(obj)/vdso.so
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE
3762306a36Sopenharmony_ci	$(call if_changed,vdso)
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci$(obj)/%.so: OBJCOPYFLAGS := -S
4062306a36Sopenharmony_ci$(obj)/%.so: $(obj)/%.so.dbg FORCE
4162306a36Sopenharmony_ci	$(call if_changed,objcopy)
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci#
4462306a36Sopenharmony_ci# Don't omit frame pointers for ease of userspace debugging, but do
4562306a36Sopenharmony_ci# optimize sibling calls.
4662306a36Sopenharmony_ci#
4762306a36Sopenharmony_ciCFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \
4862306a36Sopenharmony_ci       $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \
4962306a36Sopenharmony_ci       -fno-omit-frame-pointer -foptimize-sibling-calls
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci$(vobjs): KBUILD_CFLAGS += $(CFL)
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#
5462306a36Sopenharmony_ci# vDSO code runs in userspace and -pg doesn't help with profiling anyway.
5562306a36Sopenharmony_ci#
5662306a36Sopenharmony_ciCFLAGS_REMOVE_vdso-note.o = -pg -fprofile-arcs -ftest-coverage
5762306a36Sopenharmony_ciCFLAGS_REMOVE_um_vdso.o = -pg -fprofile-arcs -ftest-coverage
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#
6062306a36Sopenharmony_ci# The DSO images are built using a special linker script.
6162306a36Sopenharmony_ci#
6262306a36Sopenharmony_ciquiet_cmd_vdso = VDSO    $@
6362306a36Sopenharmony_ci      cmd_vdso = $(CC) -nostdlib -o $@ \
6462306a36Sopenharmony_ci		       $(CC_FLAGS_LTO) $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
6562306a36Sopenharmony_ci		       -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \
6662306a36Sopenharmony_ci		 sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@'
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciVDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv -z noexecstack
6962306a36Sopenharmony_ciGCOV_PROFILE := n
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci#
7262306a36Sopenharmony_ci# Install the unstripped copy of vdso*.so listed in $(vdso-install-y).
7362306a36Sopenharmony_ci#
7462306a36Sopenharmony_ciquiet_cmd_vdso_install = INSTALL $@
7562306a36Sopenharmony_ci      cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@
7662306a36Sopenharmony_ci$(vdso-install-y): %.so: $(obj)/%.so.dbg FORCE
7762306a36Sopenharmony_ci	@mkdir -p $(MODLIB)/vdso
7862306a36Sopenharmony_ci	$(call cmd,vdso_install)
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ciPHONY += vdso_install $(vdso-install-y)
8162306a36Sopenharmony_civdso_install: $(vdso-install-y)
82