1# SPDX-License-Identifier: GPL-2.0-only 2# Copied from arch/tile/kernel/vdso/Makefile 3 4# Include the generic Makefile to check the built vdso. 5include $(srctree)/lib/vdso/Makefile.include 6# Symbols present in the vdso 7vdso-syms = rt_sigreturn 8ifdef CONFIG_64BIT 9vdso-syms += vgettimeofday 10endif 11vdso-syms += getcpu 12vdso-syms += flush_icache 13vdso-syms += hwprobe 14vdso-syms += sys_hwprobe 15 16ifdef CONFIG_VDSO_GETRANDOM 17vdso-syms += getrandom 18endif 19 20ifdef VDSO_CFI_BUILD 21CFI_MARCH = _zicfilp_zicfiss 22CFI_FULL = -fcf-protection=full 23endif 24 25# Files to link into the vdso 26obj-vdso = $(patsubst %, %.o, $(vdso-syms)) note.o 27 28ifdef CONFIG_VDSO_GETRANDOM 29obj-vdso += vgetrandom-chacha.o 30endif 31 32ccflags-y := -fno-stack-protector 33ccflags-y += -DDISABLE_BRANCH_PROFILING 34ccflags-y += -fno-builtin 35ccflags-y += $(KBUILD_BASE_ISA)$(CFI_MARCH) 36ccflags-y += $(CFI_FULL) 37asflags-y += $(KBUILD_BASE_ISA)$(CFI_MARCH) 38asflags-y += $(CFI_FULL) 39 40ifneq ($(c-gettimeofday-y),) 41 CFLAGS_vgettimeofday.o += -fPIC -include $(c-gettimeofday-y) 42endif 43 44ifneq ($(c-getrandom-y),) 45 CFLAGS_getrandom.o += -fPIC -include $(c-getrandom-y) 46endif 47 48CFLAGS_hwprobe.o += -fPIC 49 50# Build rules 51targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.lds 52obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) 53 54obj-y += vdso.o 55CPPFLAGS_vdso.lds += -P -C -U$(ARCH) 56ifneq ($(filter vgettimeofday, $(vdso-syms)),) 57CPPFLAGS_vdso.lds += -DHAS_VGETTIMEOFDAY 58endif 59 60# Disable -pg to prevent insert call site 61CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) 62CFLAGS_REMOVE_getrandom.o = $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) 63CFLAGS_REMOVE_hwprobe.o = $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) 64 65# Force dependency 66$(obj)/vdso.o: $(obj)/vdso.so 67 68# link rule for the .so file, .lds has to be first 69$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE 70 $(call if_changed,vdsold_and_check) 71LDFLAGS_vdso.so.dbg = -shared -soname=linux-vdso.so.1 \ 72 --build-id=sha1 --eh-frame-hdr 73 74# strip rule for the .so file 75$(obj)/%.so: OBJCOPYFLAGS := -S 76$(obj)/%.so: $(obj)/%.so.dbg FORCE 77 $(call if_changed,objcopy) 78 79# Generate VDSO offsets using helper script 80gen-vdsosym := $(src)/gen_vdso_offsets.sh 81quiet_cmd_vdsosym = VDSOSYM $@ 82 cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ 83 84include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE 85 $(call if_changed,vdsosym) 86 87# actual build commands 88# The DSO images are built using a special linker script 89# Make sure only to export the intended __vdso_xxx symbol offsets. 90quiet_cmd_vdsold_and_check = VDSOLD $@ 91 cmd_vdsold_and_check = $(LD) $(CFI_FULL) $(ld_flags) -T $(filter-out FORCE,$^) -o $@.tmp && \ 92 $(OBJCOPY) $(patsubst %, -G __vdso_%, $(vdso-syms)) $@.tmp $@ && \ 93 rm $@.tmp && \ 94 $(cmd_vdso_check) 95