Commit | Line | Data |
---|---|---|
b2441318 | 1 | # SPDX-License-Identifier: GPL-2.0 |
9031fefd WD |
2 | # |
3 | # Building a vDSO image for AArch64. | |
4 | # | |
5 | # Author: Will Deacon <will.deacon@arm.com> | |
6 | # Heavily based on the vDSO Makefiles for other archs. | |
7 | # | |
8 | ||
aff69273 | 9 | # Include the generic Makefile to check the built vdso. |
28b1a824 VF |
10 | include $(srctree)/lib/vdso/Makefile |
11 | ||
12 | obj-vdso := vgettimeofday.o note.o sigreturn.o | |
9031fefd WD |
13 | |
14 | # Build rules | |
15 | targets := $(obj-vdso) vdso.so vdso.so.dbg | |
16 | obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) | |
17 | ||
5e02a188 MB |
18 | btildflags-$(CONFIG_ARM64_BTI_KERNEL) += -z force-bti |
19 | ||
86b87837 VF |
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")). | |
34688c76 | 24 | ldflags-y := -shared -soname=linux-vdso.so.1 --hash-style=sysv \ |
e0ab20b2 JG |
25 | -Bsymbolic --build-id=sha1 -n $(btildflags-y) |
26 | ||
27 | ifdef CONFIG_LD_ORPHAN_WARN | |
e1789d7c | 28 | ldflags-y += --orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL) |
e0ab20b2 JG |
29 | endif |
30 | ||
31 | ldflags-y += -T | |
9031fefd | 32 | |
98cd3c3f | 33 | ccflags-y := -fno-common -fno-builtin -fno-stack-protector -ffixed-x18 |
e35123d8 | 34 | ccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO |
28b1a824 | 35 | |
58cd4a08 VF |
36 | # -Wmissing-prototypes and -Wmissing-declarations are removed from |
37 | # the CFLAGS of vgettimeofday.c to make possible to build the | |
38 | # kernel with CONFIG_WERROR enabled. | |
613f4b3e KC |
39 | CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS) \ |
40 | $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) \ | |
f143ff39 ST |
41 | $(CC_FLAGS_LTO) $(CC_FLAGS_CFI) \ |
42 | -Wmissing-prototypes -Wmissing-declarations | |
28b1a824 | 43 | |
1578e5d0 | 44 | CFLAGS_vgettimeofday.o = -O2 -mcmodel=tiny -fasynchronous-unwind-tables |
a88754b2 VF |
45 | |
46 | ifneq ($(c-gettimeofday-y),) | |
47 | CFLAGS_vgettimeofday.o += -include $(c-gettimeofday-y) | |
28b1a824 VF |
48 | endif |
49 | ||
887af6d7 | 50 | targets += vdso.lds |
9031fefd WD |
51 | CPPFLAGS_vdso.lds += -P -C -U$(ARCH) |
52 | ||
9031fefd | 53 | # Link rule for the .so file, .lds has to be first |
697e96ed | 54 | $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE |
2e2f3c9b | 55 | $(call if_changed,vdsold_and_vdso_check) |
9031fefd WD |
56 | |
57 | # Strip rule for the .so file | |
58 | $(obj)/%.so: OBJCOPYFLAGS := -S | |
59 | $(obj)/%.so: $(obj)/%.so.dbg FORCE | |
60 | $(call if_changed,objcopy) | |
61 | ||
62 | # Generate VDSO offsets using helper script | |
b1992c37 | 63 | gen-vdsosym := $(src)/gen_vdso_offsets.sh |
9031fefd | 64 | quiet_cmd_vdsosym = VDSOSYM $@ |
697e96ed | 65 | cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ |
9031fefd | 66 | |
a66649da | 67 | include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE |
9031fefd WD |
68 | $(call if_changed,vdsosym) |
69 | ||
9031fefd | 70 | # Actual build commands |
2e2f3c9b NA |
71 | quiet_cmd_vdsold_and_vdso_check = LD $@ |
72 | cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check) |