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 23CFI_SUFFIX = -cfi 24OFFSET_SUFFIX = _cfi 25ccflags-y += -DVDSO_CFI=1 26asflags-y += -DVDSO_CFI=1 27endif 28 29# Files to link into the vdso 30obj-vdso = $(patsubst %, %.o, $(vdso-syms)) note.o 31 32ifdef CONFIG_VDSO_GETRANDOM 33obj-vdso += vgetrandom-chacha.o 34endif 35 36ccflags-y := -fno-stack-protector 37ccflags-y += -DDISABLE_BRANCH_PROFILING 38ccflags-y += -fno-builtin 39ccflags-y += $(KBUILD_BASE_ISA)$(CFI_MARCH) 40ccflags-y += $(CFI_FULL) 41asflags-y += $(KBUILD_BASE_ISA)$(CFI_MARCH) 42asflags-y += $(CFI_FULL) 43 44ifneq ($(c-gettimeofday-y),) 45 CFLAGS_vgettimeofday.o += -fPIC -include $(c-gettimeofday-y) 46endif 47 48ifneq ($(c-getrandom-y),) 49 CFLAGS_getrandom.o += -fPIC -include $(c-getrandom-y) 50endif 51 52CFLAGS_hwprobe.o += -fPIC 53 54# Build rules 55vdso_offsets := vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),)-offsets.h 56vdso_o := vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),).o 57vdso_so := vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),).so 58vdso_so_dbg := vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),).so.dbg 59vdso_lds := vdso.lds 60 61targets := $(obj-vdso) $(vdso_so) $(vdso_so_dbg) $(vdso_lds) 62 63obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) 64 65obj-y += vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),).o 66CPPFLAGS_$(vdso_lds) += -P -C -U$(ARCH) 67ifneq ($(filter vgettimeofday, $(vdso-syms)),) 68CPPFLAGS_$(vdso_lds) += -DHAS_VGETTIMEOFDAY 69endif 70 71# Disable -pg to prevent insert call site 72CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) 73CFLAGS_REMOVE_getrandom.o = $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) 74CFLAGS_REMOVE_hwprobe.o = $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) 75 76# Force dependency 77$(obj)/$(vdso_o): $(obj)/$(vdso_so) 78 79# link rule for the .so file, .lds has to be first 80$(obj)/$(vdso_so_dbg): $(obj)/$(vdso_lds) $(obj-vdso) FORCE 81 $(call if_changed,vdsold_and_check) 82LDFLAGS_$(vdso_so_dbg) = -shared -soname=linux-vdso.so.1 \ 83 --build-id=sha1 --eh-frame-hdr 84 85# strip rule for the .so file 86$(obj)/%.so: OBJCOPYFLAGS := -S 87$(obj)/%.so: $(obj)/%.so.dbg FORCE 88 $(call if_changed,objcopy) 89 90# Generate VDSO offsets using helper script 91gen-vdsosym := $(src)/gen_vdso_offsets.sh 92quiet_cmd_vdsosym = VDSOSYM $@ 93 cmd_vdsosym = $(NM) $< | $(gen-vdsosym) $(OFFSET_SUFFIX) | LC_ALL=C sort > $@ 94 95include/generated/$(vdso_offsets): $(obj)/$(vdso_so_dbg) FORCE 96 $(call if_changed,vdsosym) 97 98# actual build commands 99# The DSO images are built using a special linker script 100# Make sure only to export the intended __vdso_xxx symbol offsets. 101quiet_cmd_vdsold_and_check = VDSOLD $@ 102 cmd_vdsold_and_check = $(LD) $(CFI_FULL) $(ld_flags) -T $(filter-out FORCE,$^) -o $@.tmp && \ 103 $(OBJCOPY) $(patsubst %, -G __vdso_%, $(vdso-syms)) $@.tmp $@ && \ 104 rm $@.tmp && \ 105 $(cmd_vdso_check) 106