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 # files to link into the vdso >> 7 vobjs-y := vdso-note.o vclock_gettime.o 94 8 95 targets += $(obj-vdso-y) !! 9 # files to link into kernel 96 targets += vdso.lds !! 10 obj-y += vma.o 97 targets += vdso.so.dbg.raw vdso.so.raw << 98 targets += vdso.so.dbg vdso.so << 99 targets += vdso-image.c << 100 11 101 obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o) !! 12 # vDSO images to build >> 13 obj-$(CONFIG_SPARC64) += vdso-image-64.o >> 14 obj-$(CONFIG_COMPAT) += vdso-image-32.o 102 15 103 $(obj-vdso): KBUILD_CFLAGS := $(cflags-vdso) $ !! 16 vobjs := $(addprefix $(obj)/, $(vobjs-y)) 104 $(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $ << 105 17 106 $(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags- !! 18 $(obj)/vdso.o: $(obj)/vdso.so 107 << 108 $(obj)/vdso.so.dbg.raw: $(obj)/vdso.lds $(obj- << 109 $(call if_changed,vdsold_and_vdso_chec << 110 << 111 $(obj)/vdso-image.c: $(obj)/vdso.so.dbg.raw $( << 112 $(obj)/genvdso FORCE << 113 $(call if_changed,genvdso) << 114 << 115 obj-y += vdso-image.o << 116 << 117 # << 118 # Build O32 VDSO. << 119 # << 120 19 121 # Define these outside the ifdef to ensure the !! 20 targets += vdso.lds $(vobjs-y) 122 targets += $(obj-vdso-y:%.o=%-o32.o) !! 21 targets += $(foreach x, 32 64, vdso-image-$(x).c vdso$(x).so vdso$(x).so.dbg) 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 CPPFLAGS_vdso.lds += -P -C 129 24 130 obj-vdso-o32 := $(obj-vdso-y:%.o=$(obj)/%-o32. !! 25 VDSO_LDFLAGS_vdso.lds = -m elf64_sparc -soname linux-vdso.so.1 --no-undefined \ >> 26 -z max-page-size=8192 131 27 132 $(obj-vdso-o32): KBUILD_CFLAGS := $(cflags-vds !! 28 $(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE 133 $(obj-vdso-o32): KBUILD_AFLAGS := $(aflags-vds !! 29 $(call if_changed,vdso) 134 30 135 $(obj)/%-o32.o: $(src)/%.S FORCE !! 31 HOST_EXTRACFLAGS += -I$(srctree)/tools/include 136 $(call if_changed_dep,vdsoas_o_S) !! 32 hostprogs += vdso2c 137 33 138 $(obj)/%-o32.o: $(src)/%.c FORCE !! 34 quiet_cmd_vdso2c = VDSO2C $@ 139 $(call cmd,force_checksrc) !! 35 cmd_vdso2c = $(obj)/vdso2c $< $(<:%.dbg=%) $@ 140 $(call if_changed_rule,cc_o_c) << 141 36 142 $(obj)/vdso-o32.lds: KBUILD_CPPFLAGS := $(ccfl !! 37 $(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE 143 $(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE !! 38 $(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 39 158 # 40 # 159 # Build N32 VDSO. !! 41 # Don't omit frame pointers for ease of userspace debugging, but do >> 42 # optimize sibling calls. 160 # 43 # >> 44 CFL := $(PROFILING) -mcmodel=medlow -fPIC -O2 -fasynchronous-unwind-tables -m64 \ >> 45 $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \ >> 46 -fno-omit-frame-pointer -foptimize-sibling-calls \ >> 47 -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO 161 48 162 targets += $(obj-vdso-y:%.o=%-n32.o) !! 49 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 << 170 obj-vdso-n32 := $(obj-vdso-y:%.o=$(obj)/%-n32. << 171 50 172 $(obj-vdso-n32): KBUILD_CFLAGS := $(cflags-vds !! 51 $(vobjs): KBUILD_CFLAGS := $(filter-out $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL) 173 $(obj-vdso-n32): KBUILD_AFLAGS := $(aflags-vds << 174 52 175 $(obj)/%-n32.o: $(src)/%.S FORCE !! 53 # 176 $(call if_changed_dep,vdsoas_o_S) !! 54 # vDSO code runs in userspace and -pg doesn't help with profiling anyway. 177 !! 55 # 178 $(obj)/%-n32.o: $(src)/%.c FORCE !! 56 CFLAGS_REMOVE_vclock_gettime.o = -pg 179 $(call cmd,force_checksrc) !! 57 CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg 180 $(call if_changed_rule,cc_o_c) << 181 << 182 $(obj)/vdso-n32.lds: KBUILD_CPPFLAGS := $(ccfl << 183 $(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE << 184 $(call if_changed_dep,cpp_lds_S) << 185 << 186 $(obj)/vdso-n32.so.dbg.raw: $(obj)/vdso-n32.ld << 187 $(call if_changed,vdsold_and_vdso_chec << 188 58 189 $(obj)/vdso-n32-image.c: VDSO_NAME := n32 !! 59 $(obj)/%.so: OBJCOPYFLAGS := -S 190 $(obj)/vdso-n32-image.c: $(obj)/vdso-n32.so.db !! 60 $(obj)/%.so: $(obj)/%.so.dbg FORCE 191 $(obj)/genvdso FORCE !! 61 $(call if_changed,objcopy) 192 $(call if_changed,genvdso) << 193 62 194 obj-y += vdso-n32-image.o !! 63 CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds) >> 64 VDSO_LDFLAGS_vdso32.lds = -m elf32_sparc -soname linux-gate.so.1 195 65 196 endif !! 66 #This makes sure the $(obj) subdirectory exists even though vdso32/ >> 67 #is not a kbuild sub-make subdirectory >> 68 override obj-dirs = $(dir $(obj)) $(obj)/vdso32/ >> 69 >> 70 targets += vdso32/vdso32.lds >> 71 targets += vdso32/vdso-note.o >> 72 targets += vdso32/vclock_gettime.o >> 73 >> 74 KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS)) -DBUILD_VDSO >> 75 $(obj)/vdso32.so.dbg: KBUILD_AFLAGS = $(KBUILD_AFLAGS_32) >> 76 $(obj)/vdso32.so.dbg: asflags-$(CONFIG_SPARC64) += -m32 >> 77 >> 78 KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS)) >> 79 KBUILD_CFLAGS_32 := $(filter-out -mcmodel=medlow,$(KBUILD_CFLAGS_32)) >> 80 KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32)) >> 81 KBUILD_CFLAGS_32 := $(filter-out $(RANDSTRUCT_CFLAGS),$(KBUILD_CFLAGS_32)) >> 82 KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32)) >> 83 KBUILD_CFLAGS_32 := $(filter-out $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS_32)) >> 84 KBUILD_CFLAGS_32 += -m32 -msoft-float -fpic >> 85 KBUILD_CFLAGS_32 += -fno-stack-protector >> 86 KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls) >> 87 KBUILD_CFLAGS_32 += -fno-omit-frame-pointer >> 88 KBUILD_CFLAGS_32 += -DDISABLE_BRANCH_PROFILING >> 89 KBUILD_CFLAGS_32 += -mv8plus >> 90 $(obj)/vdso32.so.dbg: KBUILD_CFLAGS = $(KBUILD_CFLAGS_32) >> 91 >> 92 $(obj)/vdso32.so.dbg: FORCE \ >> 93 $(obj)/vdso32/vdso32.lds \ >> 94 $(obj)/vdso32/vclock_gettime.o \ >> 95 $(obj)/vdso32/vdso-note.o >> 96 $(call if_changed,vdso) >> 97 >> 98 # >> 99 # The DSO images are built using a special linker script. >> 100 # >> 101 quiet_cmd_vdso = VDSO $@ >> 102 cmd_vdso = $(LD) -nostdlib -o $@ \ >> 103 $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ >> 104 -T $(filter %.lds,$^) $(filter %.o,$^) && \ >> 105 sh $(src)/checkundef.sh '$(OBJDUMP)' '$@' 197 106 198 # FIXME: Need install rule for debug. !! 107 VDSO_LDFLAGS = -shared --hash-style=both --build-id=sha1 -Bsymbolic 199 # Needs to deal with dependency for generation <<
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.