Commit | Line | Data |
---|---|---|
ec8f24b7 | 1 | # SPDX-License-Identifier: GPL-2.0-only |
e2c0cdfb PD |
2 | # Copied from arch/tile/kernel/vdso/Makefile |
3 | ||
aff69273 | 4 | # Include the generic Makefile to check the built vdso. |
ad5d1122 | 5 | include $(srctree)/lib/vdso/Makefile |
e2c0cdfb | 6 | # Symbols present in the vdso |
28dfbe6e | 7 | vdso-syms = rt_sigreturn |
d4c08b97 | 8 | ifdef CONFIG_64BIT |
ad5d1122 | 9 | vdso-syms += vgettimeofday |
d4c08b97 | 10 | endif |
28dfbe6e | 11 | vdso-syms += getcpu |
921ebd8f | 12 | vdso-syms += flush_icache |
aa5af0aa EG |
13 | vdso-syms += hwprobe |
14 | vdso-syms += sys_hwprobe | |
e2c0cdfb PD |
15 | |
16 | # Files to link into the vdso | |
0a9f2a61 | 17 | obj-vdso = $(patsubst %, %.o, $(vdso-syms)) note.o |
e2c0cdfb | 18 | |
40284a07 | 19 | ccflags-y := -fno-stack-protector |
74f6bb55 | 20 | ccflags-y += -DDISABLE_BRANCH_PROFILING |
40284a07 | 21 | |
ad5d1122 | 22 | ifneq ($(c-gettimeofday-y),) |
a0fc3b32 | 23 | CFLAGS_vgettimeofday.o += -fPIC -include $(c-gettimeofday-y) |
ad5d1122 VC |
24 | endif |
25 | ||
aa5af0aa EG |
26 | CFLAGS_hwprobe.o += -fPIC |
27 | ||
e2c0cdfb | 28 | # Build rules |
fde9c59a | 29 | targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds |
e2c0cdfb PD |
30 | obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) |
31 | ||
fde9c59a | 32 | obj-y += vdso.o |
e2c0cdfb | 33 | CPPFLAGS_vdso.lds += -P -C -U$(ARCH) |
fcae44fd NC |
34 | ifneq ($(filter vgettimeofday, $(vdso-syms)),) |
35 | CPPFLAGS_vdso.lds += -DHAS_VGETTIMEOFDAY | |
36 | endif | |
e2c0cdfb | 37 | |
e05d57dc | 38 | # Disable -pg to prevent insert call site |
d1584d79 | 39 | CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) |
ad14f7ca | 40 | CFLAGS_REMOVE_hwprobe.o = $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) |
e05d57dc | 41 | |
f3d60f2a | 42 | # Disable profiling and instrumentation for VDSO code |
e2c0cdfb | 43 | GCOV_PROFILE := n |
20d38f7c | 44 | KCOV_INSTRUMENT := n |
f3d60f2a | 45 | KASAN_SANITIZE := n |
8341dcfb | 46 | UBSAN_SANITIZE := n |
e2c0cdfb PD |
47 | |
48 | # Force dependency | |
49 | $(obj)/vdso.o: $(obj)/vdso.so | |
50 | ||
51 | # link rule for the .so file, .lds has to be first | |
772d7891 | 52 | $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE |
e2c0cdfb | 53 | $(call if_changed,vdsold) |
fde9c59a | 54 | LDFLAGS_vdso.so.dbg = -shared -S -soname=linux-vdso.so.1 \ |
7f3d3490 | 55 | --build-id=sha1 --hash-style=both --eh-frame-hdr |
e2c0cdfb | 56 | |
e2c0cdfb PD |
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 | ||
fde9c59a SA |
62 | # Generate VDSO offsets using helper script |
63 | gen-vdsosym := $(srctree)/$(src)/gen_vdso_offsets.sh | |
64 | quiet_cmd_vdsosym = VDSOSYM $@ | |
65 | cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ | |
66 | ||
67 | include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE | |
68 | $(call if_changed,vdsosym) | |
69 | ||
e2c0cdfb PD |
70 | # actual build commands |
71 | # The DSO images are built using a special linker script | |
e2c0cdfb PD |
72 | # Make sure only to export the intended __vdso_xxx symbol offsets. |
73 | quiet_cmd_vdsold = VDSOLD $@ | |
7f3d3490 NC |
74 | cmd_vdsold = $(LD) $(ld_flags) -T $(filter-out FORCE,$^) -o $@.tmp && \ |
75 | $(OBJCOPY) $(patsubst %, -G __vdso_%, $(vdso-syms)) $@.tmp $@ && \ | |
95f4d9cc | 76 | rm $@.tmp |