xref: /linux/arch/riscv/kernel/vdso/Makefile (revision 073e62fd33fe9cec754cb89e60c0ebbab781a50a)
1ec8f24b7SThomas Gleixner# SPDX-License-Identifier: GPL-2.0-only
2e2c0cdfbSPalmer Dabbelt# Copied from arch/tile/kernel/vdso/Makefile
3e2c0cdfbSPalmer Dabbelt
4aff69273SFangrui Song# Include the generic Makefile to check the built vdso.
5127b0e05SThomas Weißschuhinclude $(srctree)/lib/vdso/Makefile.include
6e2c0cdfbSPalmer Dabbelt# Symbols present in the vdso
7e2c0cdfbSPalmer Dabbeltvdso-syms  = rt_sigreturn
8d4c08b97SArnd Bergmannifdef CONFIG_64BIT
9ad5d1122SVincent Chenvdso-syms += vgettimeofday
10d4c08b97SArnd Bergmannendif
1128dfbe6eSAndrew Watermanvdso-syms += getcpu
12921ebd8fSAndrew Watermanvdso-syms += flush_icache
13aa5af0aaSEvan Greenvdso-syms += hwprobe
14aa5af0aaSEvan Greenvdso-syms += sys_hwprobe
15e2c0cdfbSPalmer Dabbelt
16ee0d0305SXi Ruoyaoifdef CONFIG_VDSO_GETRANDOM
17ee0d0305SXi Ruoyaovdso-syms += getrandom
18ee0d0305SXi Ruoyaoendif
19ee0d0305SXi Ruoyao
2037f57bd3SJim Shuifdef VDSO_CFI_BUILD
2137f57bd3SJim ShuCFI_MARCH = _zicfilp_zicfiss
2237f57bd3SJim ShuCFI_FULL = -fcf-protection=full
23ccad8c13SDeepak GuptaCFI_SUFFIX = -cfi
24ccad8c13SDeepak GuptaOFFSET_SUFFIX = _cfi
25ccad8c13SDeepak Guptaccflags-y += -DVDSO_CFI=1
26ccad8c13SDeepak Guptaasflags-y += -DVDSO_CFI=1
2737f57bd3SJim Shuendif
2837f57bd3SJim Shu
29e2c0cdfbSPalmer Dabbelt# Files to link into the vdso
300a9f2a61SAndreas Schwabobj-vdso = $(patsubst %, %.o, $(vdso-syms)) note.o
31e2c0cdfbSPalmer Dabbelt
32ee0d0305SXi Ruoyaoifdef CONFIG_VDSO_GETRANDOM
33ee0d0305SXi Ruoyaoobj-vdso += vgetrandom-chacha.o
34ee0d0305SXi Ruoyaoendif
35ee0d0305SXi Ruoyao
3640284a07STobias Klauserccflags-y := -fno-stack-protector
3774f6bb55SJisheng Zhangccflags-y += -DDISABLE_BRANCH_PROFILING
38bf40167dSAlexandre Ghiticcflags-y += -fno-builtin
3937f57bd3SJim Shuccflags-y += $(KBUILD_BASE_ISA)$(CFI_MARCH)
4037f57bd3SJim Shuccflags-y += $(CFI_FULL)
4137f57bd3SJim Shuasflags-y += $(KBUILD_BASE_ISA)$(CFI_MARCH)
4237f57bd3SJim Shuasflags-y += $(CFI_FULL)
4340284a07STobias Klauser
44*9cfff2edSThomas Weißschuhccflags-remove-y += $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_LTO)
45*9cfff2edSThomas Weißschuh
46ad5d1122SVincent Chenifneq ($(c-gettimeofday-y),)
47a0fc3b32SVincent Chen  CFLAGS_vgettimeofday.o += -fPIC -include $(c-gettimeofday-y)
48ad5d1122SVincent Chenendif
49ad5d1122SVincent Chen
50ee0d0305SXi Ruoyaoifneq ($(c-getrandom-y),)
51ee0d0305SXi Ruoyao  CFLAGS_getrandom.o += -fPIC -include $(c-getrandom-y)
52ee0d0305SXi Ruoyaoendif
53ee0d0305SXi Ruoyao
54aa5af0aaSEvan GreenCFLAGS_hwprobe.o += -fPIC
55aa5af0aaSEvan Green
56e2c0cdfbSPalmer Dabbelt# Build rules
57ccad8c13SDeepak Guptavdso_offsets := vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),)-offsets.h
58ccad8c13SDeepak Guptavdso_o := vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),).o
59ccad8c13SDeepak Guptavdso_so := vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),).so
60ccad8c13SDeepak Guptavdso_so_dbg := vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),).so.dbg
61ccad8c13SDeepak Guptavdso_lds := vdso.lds
62ccad8c13SDeepak Gupta
63ccad8c13SDeepak Guptatargets := $(obj-vdso) $(vdso_so) $(vdso_so_dbg) $(vdso_lds)
64ccad8c13SDeepak Gupta
65e2c0cdfbSPalmer Dabbeltobj-vdso := $(addprefix $(obj)/, $(obj-vdso))
66e2c0cdfbSPalmer Dabbelt
67ccad8c13SDeepak Guptaobj-y += vdso$(if $(VDSO_CFI_BUILD),$(CFI_SUFFIX),).o
68ccad8c13SDeepak GuptaCPPFLAGS_$(vdso_lds) += -P -C -U$(ARCH)
69fcae44fdSNathan Chancellorifneq ($(filter vgettimeofday, $(vdso-syms)),)
70ccad8c13SDeepak GuptaCPPFLAGS_$(vdso_lds) += -DHAS_VGETTIMEOFDAY
71fcae44fdSNathan Chancellorendif
72e2c0cdfbSPalmer Dabbelt
73e2c0cdfbSPalmer Dabbelt# Force dependency
74ccad8c13SDeepak Gupta$(obj)/$(vdso_o): $(obj)/$(vdso_so)
75e2c0cdfbSPalmer Dabbelt
76e2c0cdfbSPalmer Dabbelt# link rule for the .so file, .lds has to be first
77ccad8c13SDeepak Gupta$(obj)/$(vdso_so_dbg): $(obj)/$(vdso_lds) $(obj-vdso) FORCE
78c6898d66SAlexandre Ghiti	$(call if_changed,vdsold_and_check)
79ccad8c13SDeepak GuptaLDFLAGS_$(vdso_so_dbg) = -shared -soname=linux-vdso.so.1 \
802940954cSXi Ruoyao	--build-id=sha1 --eh-frame-hdr
81e2c0cdfbSPalmer Dabbelt
82e2c0cdfbSPalmer Dabbelt# strip rule for the .so file
83e2c0cdfbSPalmer Dabbelt$(obj)/%.so: OBJCOPYFLAGS := -S
84e2c0cdfbSPalmer Dabbelt$(obj)/%.so: $(obj)/%.so.dbg FORCE
85e2c0cdfbSPalmer Dabbelt	$(call if_changed,objcopy)
86e2c0cdfbSPalmer Dabbelt
87fde9c59aSSaleem Abdulrasool# Generate VDSO offsets using helper script
88b1992c37SMasahiro Yamadagen-vdsosym := $(src)/gen_vdso_offsets.sh
89fde9c59aSSaleem Abdulrasoolquiet_cmd_vdsosym = VDSOSYM $@
90ccad8c13SDeepak Gupta	cmd_vdsosym = $(NM) $< | $(gen-vdsosym) $(OFFSET_SUFFIX) | LC_ALL=C sort > $@
91fde9c59aSSaleem Abdulrasool
92ccad8c13SDeepak Guptainclude/generated/$(vdso_offsets): $(obj)/$(vdso_so_dbg) FORCE
93fde9c59aSSaleem Abdulrasool	$(call if_changed,vdsosym)
94fde9c59aSSaleem Abdulrasool
95e2c0cdfbSPalmer Dabbelt# actual build commands
96e2c0cdfbSPalmer Dabbelt# The DSO images are built using a special linker script
97e2c0cdfbSPalmer Dabbelt# Make sure only to export the intended __vdso_xxx symbol offsets.
98c6898d66SAlexandre Ghitiquiet_cmd_vdsold_and_check = VDSOLD  $@
9937f57bd3SJim Shu      cmd_vdsold_and_check = $(LD) $(CFI_FULL) $(ld_flags) -T $(filter-out FORCE,$^) -o $@.tmp && \
1007f3d3490SNathan Chancellor                   $(OBJCOPY) $(patsubst %, -G __vdso_%, $(vdso-syms)) $@.tmp $@ && \
101c6898d66SAlexandre Ghiti                   rm $@.tmp && \
102c6898d66SAlexandre Ghiti                   $(cmd_vdso_check)
103