18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci# 38c2ecf20Sopenharmony_ci# Building vDSO images for x86. 48c2ecf20Sopenharmony_ci# 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. 78c2ecf20Sopenharmony_ciKCOV_INSTRUMENT := n 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ciVDSO64-y := y 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_civdso-install-$(VDSO64-y) += vdso.so 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci# files to link into the vdso 158c2ecf20Sopenharmony_civobjs-y := vdso-note.o um_vdso.o 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci# files to link into kernel 188c2ecf20Sopenharmony_ciobj-$(VDSO64-y) += vdso.o vma.o 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_civobjs := $(foreach F,$(vobjs-y),$(obj)/$F) 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci$(obj)/vdso.o: $(obj)/vdso.so 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_citargets += vdso.so vdso.so.dbg vdso.lds $(vobjs-y) 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ciCPPFLAGS_vdso.lds += -P -C 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ciVDSO_LDFLAGS_vdso.lds = -m64 -Wl,-soname=linux-vdso.so.1 \ 298c2ecf20Sopenharmony_ci -Wl,-z,max-page-size=4096 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci$(obj)/vdso.o: $(src)/vdso.S $(obj)/vdso.so 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE 348c2ecf20Sopenharmony_ci $(call if_changed,vdso) 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci$(obj)/%.so: OBJCOPYFLAGS := -S 378c2ecf20Sopenharmony_ci$(obj)/%.so: $(obj)/%.so.dbg FORCE 388c2ecf20Sopenharmony_ci $(call if_changed,objcopy) 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci# 418c2ecf20Sopenharmony_ci# Don't omit frame pointers for ease of userspace debugging, but do 428c2ecf20Sopenharmony_ci# optimize sibling calls. 438c2ecf20Sopenharmony_ci# 448c2ecf20Sopenharmony_ciCFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \ 458c2ecf20Sopenharmony_ci $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \ 468c2ecf20Sopenharmony_ci -fno-omit-frame-pointer -foptimize-sibling-calls 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci$(vobjs): KBUILD_CFLAGS += $(CFL) 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci# 518c2ecf20Sopenharmony_ci# vDSO code runs in userspace and -pg doesn't help with profiling anyway. 528c2ecf20Sopenharmony_ci# 538c2ecf20Sopenharmony_ciCFLAGS_REMOVE_vdso-note.o = -pg -fprofile-arcs -ftest-coverage 548c2ecf20Sopenharmony_ciCFLAGS_REMOVE_um_vdso.o = -pg -fprofile-arcs -ftest-coverage 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci# 578c2ecf20Sopenharmony_ci# The DSO images are built using a special linker script. 588c2ecf20Sopenharmony_ci# 598c2ecf20Sopenharmony_ciquiet_cmd_vdso = VDSO $@ 608c2ecf20Sopenharmony_ci cmd_vdso = $(CC) -nostdlib -o $@ \ 618c2ecf20Sopenharmony_ci $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ 628c2ecf20Sopenharmony_ci -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \ 638c2ecf20Sopenharmony_ci sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@' 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ciVDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv -z noexecstack 668c2ecf20Sopenharmony_ciGCOV_PROFILE := n 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci# 698c2ecf20Sopenharmony_ci# Install the unstripped copy of vdso*.so listed in $(vdso-install-y). 708c2ecf20Sopenharmony_ci# 718c2ecf20Sopenharmony_ciquiet_cmd_vdso_install = INSTALL $@ 728c2ecf20Sopenharmony_ci cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@ 738c2ecf20Sopenharmony_ci$(vdso-install-y): %.so: $(obj)/%.so.dbg FORCE 748c2ecf20Sopenharmony_ci @mkdir -p $(MODLIB)/vdso 758c2ecf20Sopenharmony_ci $(call cmd,vdso_install) 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ciPHONY += vdso_install $(vdso-install-y) 788c2ecf20Sopenharmony_civdso_install: $(vdso-install-y) 79