1c0087d80SHeiko Carstens# SPDX-License-Identifier: GPL-2.0 2c0087d80SHeiko Carstens# List of files in the vdso 3c0087d80SHeiko Carstens 4c0087d80SHeiko Carstens# Include the generic Makefile to check the built vdso. 5c0087d80SHeiko Carstensinclude $(srctree)/lib/vdso/Makefile.include 6c0087d80SHeiko Carstensobj-vdso = vdso_user_wrapper.o note.o vgetrandom-chacha.o 7c0087d80SHeiko Carstensobj-cvdso = vdso_generic.o getcpu.o vgetrandom.o 8c0087d80SHeiko CarstensVDSO_CFLAGS_REMOVE := -pg $(CC_FLAGS_FTRACE) $(CC_FLAGS_EXPOLINE) 9c0087d80SHeiko CarstensCFLAGS_REMOVE_getcpu.o = $(VDSO_CFLAGS_REMOVE) 10c0087d80SHeiko CarstensCFLAGS_REMOVE_vgetrandom.o = $(VDSO_CFLAGS_REMOVE) 11c0087d80SHeiko CarstensCFLAGS_REMOVE_vdso_generic.o = $(VDSO_CFLAGS_REMOVE) 12c0087d80SHeiko Carstens 13c0087d80SHeiko Carstensifneq ($(c-getrandom-y),) 14c0087d80SHeiko Carstens CFLAGS_vgetrandom.o += -include $(c-getrandom-y) 15c0087d80SHeiko Carstensendif 16c0087d80SHeiko Carstens 17c0087d80SHeiko Carstens# Build rules 18c0087d80SHeiko Carstens 19c0087d80SHeiko Carstenstargets := $(obj-vdso) $(obj-cvdso) vdso.so vdso.so.dbg 20c0087d80SHeiko Carstensobj-vdso := $(addprefix $(obj)/, $(obj-vdso)) 21c0087d80SHeiko Carstensobj-cvdso := $(addprefix $(obj)/, $(obj-cvdso)) 22c0087d80SHeiko Carstens 23*509c3492SHeiko CarstensKBUILD_AFLAGS_VDSO := $(KBUILD_AFLAGS) -DBUILD_VDSO 24c0087d80SHeiko Carstens 25*509c3492SHeiko CarstensKBUILD_CFLAGS_VDSO := $(KBUILD_CFLAGS) -DBUILD_VDSO -DDISABLE_BRANCH_PROFILING 26c0087d80SHeiko CarstensKBUILD_CFLAGS_VDSO := $(filter-out -mpacked-stack,$(KBUILD_CFLAGS_VDSO)) 27c0087d80SHeiko CarstensKBUILD_CFLAGS_VDSO := $(filter-out -mno-pic-data-is-text-relative,$(KBUILD_CFLAGS_VDSO)) 28c0087d80SHeiko CarstensKBUILD_CFLAGS_VDSO := $(filter-out -munaligned-symbols,$(KBUILD_CFLAGS_VDSO)) 29c0087d80SHeiko CarstensKBUILD_CFLAGS_VDSO := $(filter-out -fno-asynchronous-unwind-tables,$(KBUILD_CFLAGS_VDSO)) 30*509c3492SHeiko CarstensKBUILD_CFLAGS_VDSO += -fPIC -fno-common -fno-builtin -fasynchronous-unwind-tables 31c0087d80SHeiko CarstensKBUILD_CFLAGS_VDSO += -fno-stack-protector 32c0087d80SHeiko Carstensldflags-y := -shared -soname=linux-vdso.so.1 \ 33c0087d80SHeiko Carstens --hash-style=both --build-id=sha1 -T 34c0087d80SHeiko Carstens 35c0087d80SHeiko Carstens$(targets:%=$(obj)/%.dbg): KBUILD_CFLAGS = $(KBUILD_CFLAGS_VDSO) 36c0087d80SHeiko Carstens$(targets:%=$(obj)/%.dbg): KBUILD_AFLAGS = $(KBUILD_AFLAGS_VDSO) 37c0087d80SHeiko Carstens 38c0087d80SHeiko Carstensobj-y += vdso_wrapper.o 39c0087d80SHeiko Carstenstargets += vdso.lds 40c0087d80SHeiko CarstensCPPFLAGS_vdso.lds += -P -C -U$(ARCH) 41c0087d80SHeiko Carstens 42c0087d80SHeiko Carstens# Force dependency (incbin is bad) 43c0087d80SHeiko Carstens$(obj)/vdso_wrapper.o : $(obj)/vdso.so 44c0087d80SHeiko Carstens 45c0087d80SHeiko Carstensquiet_cmd_vdso_and_check = VDSO $@ 46c0087d80SHeiko Carstens cmd_vdso_and_check = $(cmd_ld); $(cmd_vdso_check) 47c0087d80SHeiko Carstens 48c0087d80SHeiko Carstens# link rule for the .so file, .lds has to be first 49c0087d80SHeiko Carstens$(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) $(obj-cvdso) FORCE 50c0087d80SHeiko Carstens $(call if_changed,vdso_and_check) 51c0087d80SHeiko Carstens 52c0087d80SHeiko Carstens# strip rule for the .so file 53c0087d80SHeiko Carstens$(obj)/%.so: OBJCOPYFLAGS := -S 54c0087d80SHeiko Carstens$(obj)/%.so: $(obj)/%.so.dbg FORCE 55c0087d80SHeiko Carstens $(call if_changed,objcopy) 56c0087d80SHeiko Carstens 57c0087d80SHeiko Carstens# assembly rules for the .S files 58c0087d80SHeiko Carstens$(obj-vdso): %.o: %.S FORCE 59c0087d80SHeiko Carstens $(call if_changed_dep,vdsoas) 60c0087d80SHeiko Carstens 61c0087d80SHeiko Carstens$(obj-cvdso): %.o: %.c FORCE 62c0087d80SHeiko Carstens $(call if_changed_dep,vdsocc) 63c0087d80SHeiko Carstens 64c0087d80SHeiko Carstens# actual build commands 65c0087d80SHeiko Carstensquiet_cmd_vdsoas = VDSOA $@ 66c0087d80SHeiko Carstens cmd_vdsoas = $(CC) $(a_flags) -c -o $@ $< 67c0087d80SHeiko Carstensquiet_cmd_vdsocc = VDSOC $@ 68c0087d80SHeiko Carstens cmd_vdsocc = $(CC) $(c_flags) -c -o $@ $< 69c0087d80SHeiko Carstens 70c0087d80SHeiko Carstens# Generate VDSO offsets using helper script 71c0087d80SHeiko Carstensgen-vdsosym := $(src)/gen_vdso_offsets.sh 72c0087d80SHeiko Carstensquiet_cmd_vdsosym = VDSOSYM $@ 73c0087d80SHeiko Carstens cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ 74c0087d80SHeiko Carstens 75c0087d80SHeiko Carstensinclude/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE 76c0087d80SHeiko Carstens $(call if_changed,vdsosym) 77