1 # SPDX-License-Identifier: GPL-2.0
3 # Building a vDSO image for AArch64.
5 # Author: Will Deacon <will.deacon@arm.com>
6 # Heavily based on the vDSO Makefiles for other archs.
9 # Include the generic Makefile to check the built vdso.
10 include $(srctree
)/lib
/vdso
/Makefile
12 obj-vdso
:= vgettimeofday.o note.o sigreturn.o vgetrandom.o vgetrandom-chacha.o
15 targets
:= $(obj-vdso
) vdso.so vdso.so.dbg
16 obj-vdso
:= $(addprefix $(obj
)/, $(obj-vdso
))
18 btildflags-
$(CONFIG_ARM64_BTI_KERNEL
) += -z force-bti
20 # -Bsymbolic has been added for consistency with arm, the compat vDSO and
21 # potential future proofing if we end up with internal calls to the exported
22 # routines, as x86 does (see 6f121e548f83 ("x86, vdso: Reimplement vdso.so
23 # preparation in build-time C")).
24 ldflags-y
:= -shared
-soname
=linux-vdso.so
.1 \
25 -Bsymbolic
--build-id
=sha1
-n
$(btildflags-y
)
27 ifdef CONFIG_LD_ORPHAN_WARN
28 ldflags-y
+= --orphan-handling
=$(CONFIG_LD_ORPHAN_WARN_LEVEL
)
33 ccflags-y
:= -fno-common
-fno-builtin
-fno-stack-protector
-ffixed-x18
34 ccflags-y
+= -DDISABLE_BRANCH_PROFILING
-DBUILD_VDSO
36 # -Wmissing-prototypes and -Wmissing-declarations are removed from
37 # the CFLAGS to make possible to build the kernel with CONFIG_WERROR enabled.
38 CC_FLAGS_REMOVE_VDSO
:= $(CC_FLAGS_FTRACE
) -Os
$(CC_FLAGS_SCS
) \
39 $(RANDSTRUCT_CFLAGS
) $(GCC_PLUGINS_CFLAGS
) \
40 $(CC_FLAGS_LTO
) $(CC_FLAGS_CFI
) \
41 -Wmissing-prototypes
-Wmissing-declarations
43 CC_FLAGS_ADD_VDSO
:= -O2
-mcmodel
=tiny
-fasynchronous-unwind-tables
45 CFLAGS_REMOVE_vgettimeofday.o
= $(CC_FLAGS_REMOVE_VDSO
)
46 CFLAGS_REMOVE_vgetrandom.o
= $(CC_FLAGS_REMOVE_VDSO
)
48 CFLAGS_vgettimeofday.o
= $(CC_FLAGS_ADD_VDSO
)
49 CFLAGS_vgetrandom.o
= $(CC_FLAGS_ADD_VDSO
)
51 ifneq ($(c-gettimeofday-y
),)
52 CFLAGS_vgettimeofday.o
+= -include $(c-gettimeofday-y
)
55 ifneq ($(c-getrandom-y
),)
56 CFLAGS_vgetrandom.o
+= -include $(c-getrandom-y
)
60 CPPFLAGS_vdso.lds
+= -P
-C
-U
$(ARCH
)
62 # Link rule for the .so file, .lds has to be first
63 $(obj
)/vdso.so.dbg
: $(obj
)/vdso.lds
$(obj-vdso
) FORCE
64 $(call if_changed
,vdsold_and_vdso_check
)
66 # Strip rule for the .so file
67 $(obj
)/%.so
: OBJCOPYFLAGS
:= -S
68 $(obj
)/%.so
: $(obj
)/%.so.dbg FORCE
69 $(call if_changed
,objcopy
)
71 # Generate VDSO offsets using helper script
72 gen-vdsosym
:= $(src
)/gen_vdso_offsets.sh
73 quiet_cmd_vdsosym
= VDSOSYM
$@
74 cmd_vdsosym
= $(NM
) $< |
$(gen-vdsosym
) | LC_ALL
=C
sort > $@
76 include/generated
/vdso-offsets.h
: $(obj
)/vdso.so.dbg FORCE
77 $(call if_changed
,vdsosym
)
79 # Actual build commands
80 quiet_cmd_vdsold_and_vdso_check
= LD
$@
81 cmd_vdsold_and_vdso_check
= $(cmd_ld
); $(cmd_vdso_check
)