]>
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 | ||
28b1a824 VF |
9 | # Absolute relocation type $(ARCH_REL_TYPE_ABS) needs to be defined before |
10 | # the inclusion of generic Makefile. | |
11 | ARCH_REL_TYPE_ABS := R_AARCH64_JUMP_SLOT|R_AARCH64_GLOB_DAT|R_AARCH64_ABS64 | |
12 | include $(srctree)/lib/vdso/Makefile | |
13 | ||
14 | obj-vdso := vgettimeofday.o note.o sigreturn.o | |
9031fefd WD |
15 | |
16 | # Build rules | |
17 | targets := $(obj-vdso) vdso.so vdso.so.dbg | |
18 | obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) | |
19 | ||
7a0a93c5 LA |
20 | ldflags-y := -shared -nostdlib -soname=linux-vdso.so.1 --hash-style=sysv \ |
21 | --build-id -n -T | |
9031fefd | 22 | |
98cd3c3f | 23 | ccflags-y := -fno-common -fno-builtin -fno-stack-protector -ffixed-x18 |
28b1a824 VF |
24 | ccflags-y += -DDISABLE_BRANCH_PROFILING |
25 | ||
26 | VDSO_LDFLAGS := -Bsymbolic | |
27 | ||
28 | CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os | |
29 | KBUILD_CFLAGS += $(DISABLE_LTO) | |
30 | KASAN_SANITIZE := n | |
31 | UBSAN_SANITIZE := n | |
32 | OBJECT_FILES_NON_STANDARD := y | |
33 | KCOV_INSTRUMENT := n | |
34 | ||
7174b077 | 35 | CFLAGS_vgettimeofday.o = -O2 -mcmodel=tiny -fasynchronous-unwind-tables |
a88754b2 VF |
36 | |
37 | ifneq ($(c-gettimeofday-y),) | |
38 | CFLAGS_vgettimeofday.o += -include $(c-gettimeofday-y) | |
28b1a824 VF |
39 | endif |
40 | ||
3acf4be2 VF |
41 | # Clang versions less than 8 do not support -mcmodel=tiny |
42 | ifeq ($(CONFIG_CC_IS_CLANG), y) | |
43 | ifeq ($(shell test $(CONFIG_CLANG_VERSION) -lt 80000; echo $$?),0) | |
44 | CFLAGS_REMOVE_vgettimeofday.o += -mcmodel=tiny | |
45 | endif | |
46 | endif | |
47 | ||
54309784 AB |
48 | # Disable gcov profiling for VDSO code |
49 | GCOV_PROFILE := n | |
50 | ||
9031fefd | 51 | obj-y += vdso.o |
a66649da | 52 | extra-y += vdso.lds |
9031fefd WD |
53 | CPPFLAGS_vdso.lds += -P -C -U$(ARCH) |
54 | ||
55 | # Force dependency (incbin is bad) | |
56 | $(obj)/vdso.o : $(obj)/vdso.so | |
57 | ||
58 | # Link rule for the .so file, .lds has to be first | |
697e96ed | 59 | $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE |
2e2f3c9b | 60 | $(call if_changed,vdsold_and_vdso_check) |
9031fefd WD |
61 | |
62 | # Strip rule for the .so file | |
63 | $(obj)/%.so: OBJCOPYFLAGS := -S | |
64 | $(obj)/%.so: $(obj)/%.so.dbg FORCE | |
65 | $(call if_changed,objcopy) | |
66 | ||
67 | # Generate VDSO offsets using helper script | |
68 | gen-vdsosym := $(srctree)/$(src)/gen_vdso_offsets.sh | |
69 | quiet_cmd_vdsosym = VDSOSYM $@ | |
697e96ed | 70 | cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ |
9031fefd | 71 | |
a66649da | 72 | include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE |
9031fefd WD |
73 | $(call if_changed,vdsosym) |
74 | ||
9031fefd | 75 | # Actual build commands |
2e2f3c9b NA |
76 | quiet_cmd_vdsold_and_vdso_check = LD $@ |
77 | cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check) | |
78 | ||
9031fefd WD |
79 | # Install commands for the unstripped file |
80 | quiet_cmd_vdso_install = INSTALL $@ | |
81 | cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@ | |
82 | ||
83 | vdso.so: $(obj)/vdso.so.dbg | |
84 | @mkdir -p $(MODLIB)/vdso | |
85 | $(call cmd,vdso_install) | |
86 | ||
87 | vdso_install: vdso.so |