1 # SPDX-License-Identifier: GPL-2.0-only
3 # Include the generic Makefile to check the built vdso.
4 include $(srctree
)/lib
/vdso
/Makefile
6 # Symbols present in the vdso
7 vdso-syms
+= rt_sigreturn
8 vdso-syms
+= vgettimeofday
10 # Files to link into the vdso
11 obj-vdso
= $(patsubst %, %.o
, $(vdso-syms
)) note.o
13 ifneq ($(c-gettimeofday-y
),)
14 CFLAGS_vgettimeofday.o
+= -include $(c-gettimeofday-y
)
17 ccflags-y
:= -fno-stack-protector
-DBUILD_VDSO32
20 targets
:= $(obj-vdso
) vdso.so vdso.so.dbg vdso.lds vdso-dummy.o
21 obj-vdso
:= $(addprefix $(obj
)/, $(obj-vdso
))
23 obj-y
+= vdso.o vdso-syms.o
24 CPPFLAGS_vdso.lds
+= -P
-C
-U
$(ARCH
)
27 $(obj
)/vdso.o
: $(obj
)/vdso.so
29 SYSCFLAGS_vdso.so.dbg
= $(c_flags
)
30 $(obj
)/vdso.so.dbg
: $(obj
)/vdso.lds
$(obj-vdso
) FORCE
31 $(call if_changed
,vdsold
)
32 SYSCFLAGS_vdso.so.dbg
= -shared
-s
-Wl
,-soname
=linux-vdso.so
.1 \
33 -Wl
,--build-id
=sha1
-Wl
,--hash-style
=both
35 $(obj
)/vdso-syms.S
: $(obj
)/vdso.so FORCE
36 $(call if_changed
,so2s
)
38 # strip rule for the .so file
39 $(obj
)/%.so
: OBJCOPYFLAGS
:= -S
40 $(obj
)/%.so
: $(obj
)/%.so.dbg FORCE
41 $(call if_changed
,objcopy
)
43 # actual build commands
44 # The DSO images are built using a special linker script
45 # Make sure only to export the intended __vdso_xxx symbol offsets.
46 quiet_cmd_vdsold
= VDSOLD
$@
47 cmd_vdsold
= $(CC
) $(KBUILD_CFLAGS
) $(call cc-option
, -no-pie
) -nostdlib
-nostartfiles
$(SYSCFLAGS_
$(@F
)) \
48 -Wl
,-T
,$(filter-out FORCE
,$^
) -o
$@.tmp
&& \
49 $(CROSS_COMPILE
)objcopy \
50 $(patsubst %, -G __vdso_
%, $(vdso-syms
)) $@.tmp
$@
&& \
53 # Extracts symbol offsets from the VDSO, converting them into an assembly file
54 # that contains the same symbols at the same offsets.
55 quiet_cmd_so2s
= SO2S
$@
56 cmd_so2s
= $(NM
) -D
$< |
$(src
)/so2s.sh
> $@