xref: /linux/arch/x86/um/vdso/Makefile (revision d30c1683aaecb93d2ab95685dc4300a33d3cea7a)
1# SPDX-License-Identifier: GPL-2.0
2#
3# Building vDSO images for x86.
4#
5
6vdso-install-y += vdso.so
7
8# files to link into the vdso
9vobjs-y := vdso-note.o um_vdso.o
10
11# files to link into kernel
12obj-y += vdso.o vma.o
13
14vobjs := $(foreach F,$(vobjs-y),$(obj)/$F)
15
16$(obj)/vdso.o: $(obj)/vdso.so
17
18targets += vdso.so vdso.so.dbg vdso.lds $(vobjs-y)
19
20CPPFLAGS_vdso.lds += -P -C
21
22VDSO_LDFLAGS_vdso.lds = -m64 -Wl,-soname=linux-vdso.so.1 \
23       -Wl,-z,max-page-size=4096
24
25$(obj)/vdso.o: $(src)/vdso.S $(obj)/vdso.so
26
27$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE
28	$(call if_changed,vdso)
29
30$(obj)/%.so: OBJCOPYFLAGS := -S
31$(obj)/%.so: $(obj)/%.so.dbg FORCE
32	$(call if_changed,objcopy)
33
34#
35# Don't omit frame pointers for ease of userspace debugging, but do
36# optimize sibling calls.
37#
38CFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \
39       $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \
40       -fno-omit-frame-pointer -foptimize-sibling-calls
41
42$(vobjs): KBUILD_CFLAGS += $(CFL)
43
44#
45# vDSO code runs in userspace and -pg doesn't help with profiling anyway.
46#
47CFLAGS_REMOVE_vdso-note.o = -pg -fprofile-arcs -ftest-coverage
48CFLAGS_REMOVE_um_vdso.o = -pg -fprofile-arcs -ftest-coverage
49
50#
51# The DSO images are built using a special linker script.
52#
53quiet_cmd_vdso = VDSO    $@
54      cmd_vdso = $(CC) -nostdlib -o $@ \
55		       $(CC_FLAGS_LTO) $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
56		       -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^)
57
58VDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv -z noexecstack -Wl,--no-undefined
59