1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Building vDSO images for x86. 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. 7*4882a593SmuzhiyunKCOV_INSTRUMENT := n 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunVDSO64-y := y 10*4882a593Smuzhiyun 11*4882a593Smuzhiyunvdso-install-$(VDSO64-y) += vdso.so 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun# files to link into the vdso 15*4882a593Smuzhiyunvobjs-y := vdso-note.o um_vdso.o 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun# files to link into kernel 18*4882a593Smuzhiyunobj-$(VDSO64-y) += vdso.o vma.o 19*4882a593Smuzhiyun 20*4882a593Smuzhiyunvobjs := $(foreach F,$(vobjs-y),$(obj)/$F) 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun$(obj)/vdso.o: $(obj)/vdso.so 23*4882a593Smuzhiyun 24*4882a593Smuzhiyuntargets += vdso.so vdso.so.dbg vdso.lds $(vobjs-y) 25*4882a593Smuzhiyun 26*4882a593SmuzhiyunCPPFLAGS_vdso.lds += -P -C 27*4882a593Smuzhiyun 28*4882a593SmuzhiyunVDSO_LDFLAGS_vdso.lds = -m64 -Wl,-soname=linux-vdso.so.1 \ 29*4882a593Smuzhiyun -Wl,-z,max-page-size=4096 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun$(obj)/vdso.o: $(src)/vdso.S $(obj)/vdso.so 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE 34*4882a593Smuzhiyun $(call if_changed,vdso) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun$(obj)/%.so: OBJCOPYFLAGS := -S 37*4882a593Smuzhiyun$(obj)/%.so: $(obj)/%.so.dbg FORCE 38*4882a593Smuzhiyun $(call if_changed,objcopy) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun# 41*4882a593Smuzhiyun# Don't omit frame pointers for ease of userspace debugging, but do 42*4882a593Smuzhiyun# optimize sibling calls. 43*4882a593Smuzhiyun# 44*4882a593SmuzhiyunCFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \ 45*4882a593Smuzhiyun $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \ 46*4882a593Smuzhiyun -fno-omit-frame-pointer -foptimize-sibling-calls 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun$(vobjs): KBUILD_CFLAGS += $(CFL) 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun# 51*4882a593Smuzhiyun# vDSO code runs in userspace and -pg doesn't help with profiling anyway. 52*4882a593Smuzhiyun# 53*4882a593SmuzhiyunCFLAGS_REMOVE_vdso-note.o = -pg -fprofile-arcs -ftest-coverage 54*4882a593SmuzhiyunCFLAGS_REMOVE_um_vdso.o = -pg -fprofile-arcs -ftest-coverage 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun# 57*4882a593Smuzhiyun# The DSO images are built using a special linker script. 58*4882a593Smuzhiyun# 59*4882a593Smuzhiyunquiet_cmd_vdso = VDSO $@ 60*4882a593Smuzhiyun cmd_vdso = $(CC) -nostdlib -o $@ \ 61*4882a593Smuzhiyun $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ 62*4882a593Smuzhiyun -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \ 63*4882a593Smuzhiyun sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@' 64*4882a593Smuzhiyun 65*4882a593SmuzhiyunVDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv -z noexecstack 66*4882a593SmuzhiyunGCOV_PROFILE := n 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun# 69*4882a593Smuzhiyun# Install the unstripped copy of vdso*.so listed in $(vdso-install-y). 70*4882a593Smuzhiyun# 71*4882a593Smuzhiyunquiet_cmd_vdso_install = INSTALL $@ 72*4882a593Smuzhiyun cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@ 73*4882a593Smuzhiyun$(vdso-install-y): %.so: $(obj)/%.so.dbg FORCE 74*4882a593Smuzhiyun @mkdir -p $(MODLIB)/vdso 75*4882a593Smuzhiyun $(call cmd,vdso_install) 76*4882a593Smuzhiyun 77*4882a593SmuzhiyunPHONY += vdso_install $(vdso-install-y) 78*4882a593Smuzhiyunvdso_install: $(vdso-install-y) 79