1 # SPDX-License-Identifier: GPL-2.0
3 # Absolute relocation type $(ARCH_REL_TYPE_ABS) needs to be defined before
4 # the inclusion of generic Makefile.
5 ARCH_REL_TYPE_ABS
:= R_ARM_JUMP_SLOT|R_ARM_GLOB_DAT|R_ARM_ABS32
6 include $(srctree
)/lib
/vdso
/Makefile
10 obj-vdso
:= vgettimeofday.o datapage.o note.o
13 targets
:= $(obj-vdso
) vdso.so vdso.so.dbg vdso.so.raw vdso.lds
14 obj-vdso
:= $(addprefix $(obj
)/, $(obj-vdso
))
16 ccflags-y
:= -fPIC
-fno-common
-fno-builtin
-fno-stack-protector
17 ccflags-y
+= -DDISABLE_BRANCH_PROFILING
-DBUILD_VDSO32
19 ldflags-
$(CONFIG_CPU_ENDIAN_BE8
) := --be8
20 ldflags-y
:= -Bsymbolic
--no-undefined
-soname
=linux-vdso.so
.1 \
21 -z max-page-size
=4096 -nostdlib
-shared
$(ldflags-y
) \
22 --hash-style
=sysv
--build-id
=sha1 \
25 obj-
$(CONFIG_VDSO
) += vdso.o
26 extra-
$(CONFIG_VDSO
) += vdso.lds
27 CPPFLAGS_vdso.lds
+= -P
-C
-U
$(ARCH
)
29 CFLAGS_REMOVE_vdso.o
= -pg
31 # Force -O2 to avoid libgcc dependencies
32 CFLAGS_REMOVE_vgettimeofday.o
= -pg
-Os
$(GCC_PLUGINS_CFLAGS
)
33 ifeq ($(c-gettimeofday-y
),)
34 CFLAGS_vgettimeofday.o
= -O2
36 CFLAGS_vgettimeofday.o
= -O2
-include $(c-gettimeofday-y
)
39 # Disable gcov profiling for VDSO code
42 # Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
48 $(obj
)/vdso.o
: $(obj
)/vdso.so
50 # Link rule for the .so file
51 $(obj
)/vdso.so.raw
: $(obj
)/vdso.lds
$(obj-vdso
) FORCE
52 $(call if_changed
,vdsold_and_vdso_check
)
54 $(obj
)/vdso.so.dbg
: $(obj
)/vdso.so.raw
$(obj
)/vdsomunge FORCE
55 $(call if_changed
,vdsomunge
)
57 # Strip rule for the .so file
58 $(obj
)/%.so
: OBJCOPYFLAGS
:= -S
59 $(obj
)/%.so
: $(obj
)/%.so.dbg FORCE
60 $(call if_changed
,objcopy
)
62 # Actual build commands
63 quiet_cmd_vdsold_and_vdso_check
= LD
$@
64 cmd_vdsold_and_vdso_check
= $(cmd_ld
); $(cmd_vdso_check
)
66 quiet_cmd_vdsomunge
= MUNGE
$@
67 cmd_vdsomunge
= $(objtree
)/$(obj
)/vdsomunge
$< $@
70 # Install the unstripped copy of vdso.so.dbg. If our toolchain
71 # supports build-id, install .build-id links as well.
73 # Cribbed from arch/x86/vdso/Makefile.
75 quiet_cmd_vdso_install
= INSTALL
$<
76 define cmd_vdso_install
77 cp
$< "$(MODLIB)/vdso/vdso.so"; \
78 if readelf
-n
$< | grep
-q
'Build ID'; then \
79 buildid
=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \
80 first
=`echo $$buildid | cut -b-2`; \
81 last
=`echo $$buildid | cut -b3-`; \
82 mkdir
-p
"$(MODLIB)/vdso/.build-id/$$first"; \
83 ln
-sf
"../../vdso.so" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \
88 @mkdir
-p
$(MODLIB
)/vdso
91 vdso_install
: $(obj
)/vdso.so.dbg
$(MODLIB
)/vdso
92 $(call cmd
,vdso_install
)