1 # SPDX-License-Identifier: GPL-2.0 !! 1 # SPDX-License-Identifier: GPL-2.0-only 2 # Objects to go into the VDSO. << 3 << 4 # Include the generic Makefile to check the bu << 5 include $(srctree)/lib/vdso/Makefile << 6 << 7 obj-vdso-y := elf.o vgettimeofday.o sigreturn. << 8 << 9 # Common compiler flags between ABIs. << 10 ccflags-vdso := \ << 11 $(filter -I%,$(KBUILD_CFLAGS)) \ << 12 $(filter -E%,$(KBUILD_CFLAGS)) \ << 13 $(filter -mmicromips,$(KBUILD_CFLAGS)) << 14 $(filter -march=%,$(KBUILD_CFLAGS)) \ << 15 $(filter -m%-float,$(KBUILD_CFLAGS)) \ << 16 $(filter -mno-loongson-%,$(KBUILD_CFLA << 17 $(CLANG_FLAGS) \ << 18 -D__VDSO__ << 19 << 20 ifndef CONFIG_64BIT << 21 ccflags-vdso += -DBUILD_VDSO32 << 22 endif << 23 << 24 # << 25 # The -fno-jump-tables flag only prevents the << 26 # jump tables but does not prevent the compile << 27 # offsets. << 28 cflags-vdso := $(ccflags-vdso) \ << 29 $(filter -W%,$(filter-out -Wa$(comma)% << 30 -O3 -g -fPIC -fno-strict-aliasing -fno << 31 -mrelax-pic-calls $(call cc-option, -m << 32 -fno-stack-protector -fno-jump-tables << 33 $(call cc-option, -fno-asynchronous-un << 34 aflags-vdso := $(ccflags-vdso) \ << 35 -D__ASSEMBLY__ -Wa,-gdwarf-2 << 36 << 37 ifneq ($(c-gettimeofday-y),) << 38 CFLAGS_vgettimeofday.o = -include $(c-gettimeo << 39 << 40 # config-n32-o32-env.c prepares the environmen << 41 # library on a 64bit kernel. << 42 # Note: Needs to be included before than the g << 43 CFLAGS_vgettimeofday-o32.o = -include $(src)/c << 44 CFLAGS_vgettimeofday-n32.o = -include $(src)/c << 45 endif << 46 << 47 CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTR << 48 << 49 ifdef CONFIG_MIPS_DISABLE_VDSO << 50 obj-vdso-y := $(filter-out vgettimeofday.o, << 51 endif << 52 << 53 # VDSO linker flags. << 54 ldflags-y := -Bsymbolic --no-undefined -soname << 55 $(filter -E%,$(KBUILD_CFLAGS)) -shared << 56 -G 0 --eh-frame-hdr --hash-style=sysv << 57 << 58 CFLAGS_REMOVE_vdso.o = $(CC_FLAGS_FTRACE) << 59 << 60 # Check that we don't have PIC 'jalr t9' calls << 61 quiet_cmd_vdso_mips_check = VDSOCHK $@ << 62 cmd_vdso_mips_check = if $(OBJDUMP) --di << 63 then (echo >&2 "$@: PIC << 64 rm -f $@; /bin/fa << 65 << 66 # << 67 # Shared build commands. << 68 # << 69 << 70 quiet_cmd_vdsold_and_vdso_check = LD $@ << 71 cmd_vdsold_and_vdso_check = $(cmd_ld); $ << 72 << 73 quiet_cmd_vdsoas_o_S = AS $@ << 74 cmd_vdsoas_o_S = $(CC) $(a_flags) -c -o << 75 << 76 # Strip rule for the raw .so files << 77 $(obj)/%.so.raw: OBJCOPYFLAGS := -S << 78 $(obj)/%.so.raw: $(obj)/%.so.dbg.raw FORCE << 79 $(call if_changed,objcopy) << 80 << 81 hostprogs := genvdso << 82 << 83 quiet_cmd_genvdso = GENVDSO $@ << 84 define cmd_genvdso << 85 $(foreach file,$(filter %.raw,$^),cp $ << 86 $(obj)/genvdso $(<:%.raw=%) $(<:%.dbg. << 87 endef << 88 << 89 # 2 # 90 # Build native VDSO. !! 3 # Building vDSO images for sparc. 91 # 4 # 92 5 93 native-abi := $(filter -mabi=%,$(KBUILD_CFLAGS !! 6 KBUILD_CFLAGS += $(DISABLE_LTO) 94 << 95 targets += $(obj-vdso-y) << 96 targets += vdso.lds << 97 targets += vdso.so.dbg.raw vdso.so.raw << 98 targets += vdso.so.dbg vdso.so << 99 targets += vdso-image.c << 100 7 101 obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o) !! 8 VDSO64-$(CONFIG_SPARC64) := y >> 9 VDSOCOMPAT-$(CONFIG_COMPAT) := y 102 10 103 $(obj-vdso): KBUILD_CFLAGS := $(cflags-vdso) $ !! 11 # files to link into the vdso 104 $(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $ !! 12 vobjs-y := vdso-note.o vclock_gettime.o 105 13 106 $(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags- !! 14 # files to link into kernel >> 15 obj-y += vma.o 107 16 108 $(obj)/vdso.so.dbg.raw: $(obj)/vdso.lds $(obj- !! 17 # vDSO images to build 109 $(call if_changed,vdsold_and_vdso_chec !! 18 vdso_img-$(VDSO64-y) += 64 >> 19 vdso_img-$(VDSOCOMPAT-y) += 32 110 20 111 $(obj)/vdso-image.c: $(obj)/vdso.so.dbg.raw $( !! 21 vobjs := $(foreach F,$(vobjs-y),$(obj)/$F) 112 $(obj)/genvdso FORCE << 113 $(call if_changed,genvdso) << 114 22 115 obj-y += vdso-image.o !! 23 $(obj)/vdso.o: $(obj)/vdso.so 116 24 117 # !! 25 targets += vdso.lds $(vobjs-y) 118 # Build O32 VDSO. << 119 # << 120 26 121 # Define these outside the ifdef to ensure the !! 27 # Build the vDSO image C files and link them in. 122 targets += $(obj-vdso-y:%.o=%-o32.o) !! 28 vdso_img_objs := $(vdso_img-y:%=vdso-image-%.o) 123 targets += vdso-o32.lds !! 29 vdso_img_cfiles := $(vdso_img-y:%=vdso-image-%.c) 124 targets += vdso-o32.so.dbg.raw vdso-o32.so.raw !! 30 vdso_img_sodbg := $(vdso_img-y:%=vdso%.so.dbg) 125 targets += vdso-o32.so.dbg vdso-o32.so !! 31 obj-y += $(vdso_img_objs) 126 targets += vdso-o32-image.c !! 32 targets += $(vdso_img_cfiles) >> 33 targets += $(vdso_img_sodbg) $(vdso_img-y:%=vdso%.so) 127 34 128 ifdef CONFIG_MIPS32_O32 !! 35 CPPFLAGS_vdso.lds += -P -C 129 36 130 obj-vdso-o32 := $(obj-vdso-y:%.o=$(obj)/%-o32. !! 37 VDSO_LDFLAGS_vdso.lds = -m elf64_sparc -soname linux-vdso.so.1 --no-undefined \ >> 38 -z max-page-size=8192 131 39 132 $(obj-vdso-o32): KBUILD_CFLAGS := $(cflags-vds !! 40 $(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE 133 $(obj-vdso-o32): KBUILD_AFLAGS := $(aflags-vds !! 41 $(call if_changed,vdso) 134 42 135 $(obj)/%-o32.o: $(src)/%.S FORCE !! 43 HOST_EXTRACFLAGS += -I$(srctree)/tools/include 136 $(call if_changed_dep,vdsoas_o_S) !! 44 hostprogs-y += vdso2c 137 45 138 $(obj)/%-o32.o: $(src)/%.c FORCE !! 46 quiet_cmd_vdso2c = VDSO2C $@ 139 $(call cmd,force_checksrc) !! 47 cmd_vdso2c = $(obj)/vdso2c $< $(<:%.dbg=%) $@ 140 $(call if_changed_rule,cc_o_c) << 141 48 142 $(obj)/vdso-o32.lds: KBUILD_CPPFLAGS := $(ccfl !! 49 $(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE 143 $(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE !! 50 $(call if_changed,vdso2c) 144 $(call if_changed_dep,cpp_lds_S) << 145 << 146 $(obj)/vdso-o32.so.dbg.raw: $(obj)/vdso-o32.ld << 147 $(call if_changed,vdsold_and_vdso_chec << 148 << 149 $(obj)/vdso-o32-image.c: VDSO_NAME := o32 << 150 $(obj)/vdso-o32-image.c: $(obj)/vdso-o32.so.db << 151 $(obj)/genvdso FORCE << 152 $(call if_changed,genvdso) << 153 << 154 obj-y += vdso-o32-image.o << 155 << 156 endif << 157 51 158 # 52 # 159 # Build N32 VDSO. !! 53 # Don't omit frame pointers for ease of userspace debugging, but do >> 54 # optimize sibling calls. 160 # 55 # >> 56 CFL := $(PROFILING) -mcmodel=medlow -fPIC -O2 -fasynchronous-unwind-tables -m64 \ >> 57 $(filter -g%,$(KBUILD_CFLAGS)) $(call cc-option, -fno-stack-protector) \ >> 58 -fno-omit-frame-pointer -foptimize-sibling-calls \ >> 59 -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO 161 60 162 targets += $(obj-vdso-y:%.o=%-n32.o) !! 61 SPARC_REG_CFLAGS = -ffixed-g4 -ffixed-g5 -fcall-used-g5 -fcall-used-g7 163 targets += vdso-n32.lds << 164 targets += vdso-n32.so.dbg.raw vdso-n32.so.raw << 165 targets += vdso-n32.so.dbg vdso-n32.so << 166 targets += vdso-n32-image.c << 167 << 168 ifdef CONFIG_MIPS32_N32 << 169 62 170 obj-vdso-n32 := $(obj-vdso-y:%.o=$(obj)/%-n32. !! 63 $(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL) 171 64 172 $(obj-vdso-n32): KBUILD_CFLAGS := $(cflags-vds !! 65 # 173 $(obj-vdso-n32): KBUILD_AFLAGS := $(aflags-vds !! 66 # vDSO code runs in userspace and -pg doesn't help with profiling anyway. 174 !! 67 # 175 $(obj)/%-n32.o: $(src)/%.S FORCE !! 68 CFLAGS_REMOVE_vclock_gettime.o = -pg 176 $(call if_changed_dep,vdsoas_o_S) !! 69 CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg 177 70 178 $(obj)/%-n32.o: $(src)/%.c FORCE !! 71 $(obj)/%.so: OBJCOPYFLAGS := -S 179 $(call cmd,force_checksrc) !! 72 $(obj)/%.so: $(obj)/%.so.dbg FORCE 180 $(call if_changed_rule,cc_o_c) !! 73 $(call if_changed,objcopy) 181 74 182 $(obj)/vdso-n32.lds: KBUILD_CPPFLAGS := $(ccfl !! 75 CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds) 183 $(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE !! 76 VDSO_LDFLAGS_vdso32.lds = -m elf32_sparc -soname linux-gate.so.1 184 $(call if_changed_dep,cpp_lds_S) << 185 77 186 $(obj)/vdso-n32.so.dbg.raw: $(obj)/vdso-n32.ld !! 78 #This makes sure the $(obj) subdirectory exists even though vdso32/ 187 $(call if_changed,vdsold_and_vdso_chec !! 79 #is not a kbuild sub-make subdirectory >> 80 override obj-dirs = $(dir $(obj)) $(obj)/vdso32/ >> 81 >> 82 targets += vdso32/vdso32.lds >> 83 targets += vdso32/vdso-note.o >> 84 targets += vdso32/vclock_gettime.o >> 85 >> 86 KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS)) -DBUILD_VDSO >> 87 $(obj)/vdso32.so.dbg: KBUILD_AFLAGS = $(KBUILD_AFLAGS_32) >> 88 $(obj)/vdso32.so.dbg: asflags-$(CONFIG_SPARC64) += -m32 >> 89 >> 90 KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS)) >> 91 KBUILD_CFLAGS_32 := $(filter-out -mcmodel=medlow,$(KBUILD_CFLAGS_32)) >> 92 KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32)) >> 93 KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32)) >> 94 KBUILD_CFLAGS_32 := $(filter-out $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS_32)) >> 95 KBUILD_CFLAGS_32 += -m32 -msoft-float -fpic >> 96 KBUILD_CFLAGS_32 += $(call cc-option, -fno-stack-protector) >> 97 KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls) >> 98 KBUILD_CFLAGS_32 += -fno-omit-frame-pointer >> 99 KBUILD_CFLAGS_32 += -DDISABLE_BRANCH_PROFILING >> 100 KBUILD_CFLAGS_32 += -mv8plus >> 101 $(obj)/vdso32.so.dbg: KBUILD_CFLAGS = $(KBUILD_CFLAGS_32) >> 102 >> 103 $(obj)/vdso32.so.dbg: FORCE \ >> 104 $(obj)/vdso32/vdso32.lds \ >> 105 $(obj)/vdso32/vclock_gettime.o \ >> 106 $(obj)/vdso32/vdso-note.o >> 107 $(call if_changed,vdso) >> 108 >> 109 # >> 110 # The DSO images are built using a special linker script. >> 111 # >> 112 quiet_cmd_vdso = VDSO $@ >> 113 cmd_vdso = $(LD) -nostdlib -o $@ \ >> 114 $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ >> 115 -T $(filter %.lds,$^) $(filter %.o,$^) && \ >> 116 sh $(srctree)/$(src)/checkundef.sh '$(OBJDUMP)' '$@' >> 117 >> 118 VDSO_LDFLAGS = -shared --hash-style=both --build-id -Bsymbolic >> 119 GCOV_PROFILE := n >> 120 >> 121 # >> 122 # Install the unstripped copies of vdso*.so. If our toolchain supports >> 123 # build-id, install .build-id links as well. >> 124 # >> 125 quiet_cmd_vdso_install = INSTALL $(@:install_%=%) >> 126 define cmd_vdso_install >> 127 cp $< "$(MODLIB)/vdso/$(@:install_%=%)"; \ >> 128 if readelf -n $< |grep -q 'Build ID'; then \ >> 129 buildid=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \ >> 130 first=`echo $$buildid | cut -b-2`; \ >> 131 last=`echo $$buildid | cut -b3-`; \ >> 132 mkdir -p "$(MODLIB)/vdso/.build-id/$$first"; \ >> 133 ln -sf "../../$(@:install_%=%)" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \ >> 134 fi >> 135 endef 188 136 189 $(obj)/vdso-n32-image.c: VDSO_NAME := n32 !! 137 vdso_img_insttargets := $(vdso_img_sodbg:%.dbg=install_%) 190 $(obj)/vdso-n32-image.c: $(obj)/vdso-n32.so.db << 191 $(obj)/genvdso FORCE << 192 $(call if_changed,genvdso) << 193 138 194 obj-y += vdso-n32-image.o !! 139 $(MODLIB)/vdso: FORCE >> 140 @mkdir -p $(MODLIB)/vdso 195 141 196 endif !! 142 $(vdso_img_insttargets): install_%: $(obj)/%.dbg $(MODLIB)/vdso FORCE >> 143 $(call cmd,vdso_install) 197 144 198 # FIXME: Need install rule for debug. !! 145 PHONY += vdso_install $(vdso_img_insttargets) 199 # Needs to deal with dependency for generation !! 146 vdso_install: $(vdso_img_insttargets) FORCE
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.