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 VDSO64-$(CONFIG_SPARC64) := y 94 !! 7 VDSOCOMPAT-$(CONFIG_COMPAT) := y 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 << 101 obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o) << 102 << 103 $(obj-vdso): KBUILD_CFLAGS := $(cflags-vdso) $ << 104 $(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $ << 105 8 106 $(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags- !! 9 # files to link into the vdso >> 10 vobjs-y := vdso-note.o vclock_gettime.o 107 11 108 $(obj)/vdso.so.dbg.raw: $(obj)/vdso.lds $(obj- !! 12 # files to link into kernel 109 $(call if_changed,vdsold_and_vdso_chec !! 13 obj-y += vma.o 110 14 111 $(obj)/vdso-image.c: $(obj)/vdso.so.dbg.raw $( !! 15 # vDSO images to build 112 $(obj)/genvdso FORCE !! 16 vdso_img-$(VDSO64-y) += 64 113 $(call if_changed,genvdso) !! 17 vdso_img-$(VDSOCOMPAT-y) += 32 114 18 115 obj-y += vdso-image.o !! 19 vobjs := $(foreach F,$(vobjs-y),$(obj)/$F) 116 20 117 # !! 21 $(obj)/vdso.o: $(obj)/vdso.so 118 # Build O32 VDSO. << 119 # << 120 << 121 # Define these outside the ifdef to ensure the << 122 targets += $(obj-vdso-y:%.o=%-o32.o) << 123 targets += vdso-o32.lds << 124 targets += vdso-o32.so.dbg.raw vdso-o32.so.raw << 125 targets += vdso-o32.so.dbg vdso-o32.so << 126 targets += vdso-o32-image.c << 127 22 128 ifdef CONFIG_MIPS32_O32 !! 23 targets += vdso.lds $(vobjs-y) 129 24 130 obj-vdso-o32 := $(obj-vdso-y:%.o=$(obj)/%-o32. !! 25 # Build the vDSO image C files and link them in. >> 26 vdso_img_objs := $(vdso_img-y:%=vdso-image-%.o) >> 27 vdso_img_cfiles := $(vdso_img-y:%=vdso-image-%.c) >> 28 vdso_img_sodbg := $(vdso_img-y:%=vdso%.so.dbg) >> 29 obj-y += $(vdso_img_objs) >> 30 targets += $(vdso_img_cfiles) >> 31 targets += $(vdso_img_sodbg) $(vdso_img-y:%=vdso%.so) 131 32 132 $(obj-vdso-o32): KBUILD_CFLAGS := $(cflags-vds !! 33 CPPFLAGS_vdso.lds += -P -C 133 $(obj-vdso-o32): KBUILD_AFLAGS := $(aflags-vds << 134 34 135 $(obj)/%-o32.o: $(src)/%.S FORCE !! 35 VDSO_LDFLAGS_vdso.lds = -m elf64_sparc -soname linux-vdso.so.1 --no-undefined \ 136 $(call if_changed_dep,vdsoas_o_S) !! 36 -z max-page-size=8192 137 37 138 $(obj)/%-o32.o: $(src)/%.c FORCE !! 38 $(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE 139 $(call cmd,force_checksrc) !! 39 $(call if_changed,vdso) 140 $(call if_changed_rule,cc_o_c) << 141 40 142 $(obj)/vdso-o32.lds: KBUILD_CPPFLAGS := $(ccfl !! 41 HOST_EXTRACFLAGS += -I$(srctree)/tools/include 143 $(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE !! 42 hostprogs += vdso2c 144 $(call if_changed_dep,cpp_lds_S) << 145 43 146 $(obj)/vdso-o32.so.dbg.raw: $(obj)/vdso-o32.ld !! 44 quiet_cmd_vdso2c = VDSO2C $@ 147 $(call if_changed,vdsold_and_vdso_chec !! 45 cmd_vdso2c = $(obj)/vdso2c $< $(<:%.dbg=%) $@ 148 46 149 $(obj)/vdso-o32-image.c: VDSO_NAME := o32 !! 47 $(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE 150 $(obj)/vdso-o32-image.c: $(obj)/vdso-o32.so.db !! 48 $(call if_changed,vdso2c) 151 $(obj)/genvdso FORCE << 152 $(call if_changed,genvdso) << 153 << 154 obj-y += vdso-o32-image.o << 155 << 156 endif << 157 49 158 # 50 # 159 # Build N32 VDSO. !! 51 # Don't omit frame pointers for ease of userspace debugging, but do >> 52 # optimize sibling calls. 160 # 53 # >> 54 CFL := $(PROFILING) -mcmodel=medlow -fPIC -O2 -fasynchronous-unwind-tables -m64 \ >> 55 $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \ >> 56 -fno-omit-frame-pointer -foptimize-sibling-calls \ >> 57 -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO 161 58 162 targets += $(obj-vdso-y:%.o=%-n32.o) !! 59 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 60 170 obj-vdso-n32 := $(obj-vdso-y:%.o=$(obj)/%-n32. !! 61 $(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL) 171 62 172 $(obj-vdso-n32): KBUILD_CFLAGS := $(cflags-vds !! 63 # 173 $(obj-vdso-n32): KBUILD_AFLAGS := $(aflags-vds !! 64 # vDSO code runs in userspace and -pg doesn't help with profiling anyway. 174 !! 65 # 175 $(obj)/%-n32.o: $(src)/%.S FORCE !! 66 CFLAGS_REMOVE_vclock_gettime.o = -pg 176 $(call if_changed_dep,vdsoas_o_S) !! 67 CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg 177 68 178 $(obj)/%-n32.o: $(src)/%.c FORCE !! 69 $(obj)/%.so: OBJCOPYFLAGS := -S 179 $(call cmd,force_checksrc) !! 70 $(obj)/%.so: $(obj)/%.so.dbg FORCE 180 $(call if_changed_rule,cc_o_c) !! 71 $(call if_changed,objcopy) 181 72 182 $(obj)/vdso-n32.lds: KBUILD_CPPFLAGS := $(ccfl !! 73 CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds) 183 $(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE !! 74 VDSO_LDFLAGS_vdso32.lds = -m elf32_sparc -soname linux-gate.so.1 184 $(call if_changed_dep,cpp_lds_S) << 185 75 186 $(obj)/vdso-n32.so.dbg.raw: $(obj)/vdso-n32.ld !! 76 #This makes sure the $(obj) subdirectory exists even though vdso32/ 187 $(call if_changed,vdsold_and_vdso_chec !! 77 #is not a kbuild sub-make subdirectory >> 78 override obj-dirs = $(dir $(obj)) $(obj)/vdso32/ >> 79 >> 80 targets += vdso32/vdso32.lds >> 81 targets += vdso32/vdso-note.o >> 82 targets += vdso32/vclock_gettime.o >> 83 >> 84 KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS)) -DBUILD_VDSO >> 85 $(obj)/vdso32.so.dbg: KBUILD_AFLAGS = $(KBUILD_AFLAGS_32) >> 86 $(obj)/vdso32.so.dbg: asflags-$(CONFIG_SPARC64) += -m32 >> 87 >> 88 KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS)) >> 89 KBUILD_CFLAGS_32 := $(filter-out -mcmodel=medlow,$(KBUILD_CFLAGS_32)) >> 90 KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32)) >> 91 KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32)) >> 92 KBUILD_CFLAGS_32 := $(filter-out $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS_32)) >> 93 KBUILD_CFLAGS_32 += -m32 -msoft-float -fpic >> 94 KBUILD_CFLAGS_32 += -fno-stack-protector >> 95 KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls) >> 96 KBUILD_CFLAGS_32 += -fno-omit-frame-pointer >> 97 KBUILD_CFLAGS_32 += -DDISABLE_BRANCH_PROFILING >> 98 KBUILD_CFLAGS_32 += -mv8plus >> 99 $(obj)/vdso32.so.dbg: KBUILD_CFLAGS = $(KBUILD_CFLAGS_32) >> 100 >> 101 $(obj)/vdso32.so.dbg: FORCE \ >> 102 $(obj)/vdso32/vdso32.lds \ >> 103 $(obj)/vdso32/vclock_gettime.o \ >> 104 $(obj)/vdso32/vdso-note.o >> 105 $(call if_changed,vdso) >> 106 >> 107 # >> 108 # The DSO images are built using a special linker script. >> 109 # >> 110 quiet_cmd_vdso = VDSO $@ >> 111 cmd_vdso = $(LD) -nostdlib -o $@ \ >> 112 $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ >> 113 -T $(filter %.lds,$^) $(filter %.o,$^) && \ >> 114 sh $(srctree)/$(src)/checkundef.sh '$(OBJDUMP)' '$@' >> 115 >> 116 VDSO_LDFLAGS = -shared --hash-style=both --build-id=sha1 -Bsymbolic >> 117 GCOV_PROFILE := n >> 118 >> 119 # >> 120 # Install the unstripped copies of vdso*.so. If our toolchain supports >> 121 # build-id, install .build-id links as well. >> 122 # >> 123 quiet_cmd_vdso_install = INSTALL $(@:install_%=%) >> 124 define cmd_vdso_install >> 125 cp $< "$(MODLIB)/vdso/$(@:install_%=%)"; \ >> 126 if readelf -n $< |grep -q 'Build ID'; then \ >> 127 buildid=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \ >> 128 first=`echo $$buildid | cut -b-2`; \ >> 129 last=`echo $$buildid | cut -b3-`; \ >> 130 mkdir -p "$(MODLIB)/vdso/.build-id/$$first"; \ >> 131 ln -sf "../../$(@:install_%=%)" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \ >> 132 fi >> 133 endef 188 134 189 $(obj)/vdso-n32-image.c: VDSO_NAME := n32 !! 135 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 136 194 obj-y += vdso-n32-image.o !! 137 $(MODLIB)/vdso: FORCE >> 138 @mkdir -p $(MODLIB)/vdso 195 139 196 endif !! 140 $(vdso_img_insttargets): install_%: $(obj)/%.dbg $(MODLIB)/vdso FORCE >> 141 $(call cmd,vdso_install) 197 142 198 # FIXME: Need install rule for debug. !! 143 PHONY += vdso_install $(vdso_img_insttargets) 199 # Needs to deal with dependency for generation !! 144 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.