xref: /OK3568_Linux_fs/kernel/arch/x86/um/vdso/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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