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 \
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
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.
46 $(obj
)/vdso.o
: $(obj
)/vdso.so
48 # Link rule for the .so file
49 $(obj
)/vdso.so.raw
: $(obj
)/vdso.lds
$(obj-vdso
) FORCE
50 $(call if_changed
,vdsold_and_vdso_check
)
52 $(obj
)/vdso.so.dbg
: $(obj
)/vdso.so.raw
$(obj
)/vdsomunge FORCE
53 $(call if_changed
,vdsomunge
)
55 # Strip rule for the .so file
56 $(obj
)/%.so
: OBJCOPYFLAGS
:= -S
57 $(obj
)/%.so
: $(obj
)/%.so.dbg FORCE
58 $(call if_changed
,objcopy
)
60 # Actual build commands
61 quiet_cmd_vdsold_and_vdso_check
= LD
$@
62 cmd_vdsold_and_vdso_check
= $(cmd_ld
); $(cmd_vdso_check
)
64 quiet_cmd_vdsomunge
= MUNGE
$@
65 cmd_vdsomunge
= $(objtree
)/$(obj
)/vdsomunge
$< $@
68 # Install the unstripped copy of vdso.so.dbg. If our toolchain
69 # supports build-id, install .build-id links as well.
71 # Cribbed from arch/x86/vdso/Makefile.
73 quiet_cmd_vdso_install
= INSTALL
$<
74 define cmd_vdso_install
75 cp
$< "$(MODLIB)/vdso/vdso.so"; \
76 if readelf
-n
$< | grep
-q
'Build ID'; then \
77 buildid
=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \
78 first
=`echo $$buildid | cut -b-2`; \
79 last
=`echo $$buildid | cut -b3-`; \
80 mkdir
-p
"$(MODLIB)/vdso/.build-id/$$first"; \
81 ln
-sf
"../../vdso.so" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \
86 @mkdir
-p
$(MODLIB
)/vdso
89 vdso_install
: $(obj
)/vdso.so.dbg
$(MODLIB
)/vdso
90 $(call cmd
,vdso_install
)