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