1 # SPDX-License-Identifier: GPL-2.0 !! 1 # SPDX-License-Identifier: GPL-2.0-only 2 # Objects to go into the VDSO. !! 2 # >> 3 # Building vDSO images for sparc. >> 4 # 3 5 4 # Include the generic Makefile to check the bu !! 6 # files to link into the vdso 5 include $(srctree)/lib/vdso/Makefile !! 7 vobjs-y := vdso-note.o vclock_gettime.o 6 8 7 obj-vdso-y := elf.o vgetcpu.o vgettimeofday.o !! 9 # files to link into kernel 8 vgetrandom-chacha.o sigreturn.o !! 10 obj-y += vma.o 9 11 10 # Common compiler flags between ABIs. !! 12 # vDSO images to build 11 ccflags-vdso := \ !! 13 obj-$(CONFIG_SPARC64) += vdso-image-64.o 12 $(filter -I%,$(KBUILD_CFLAGS)) \ !! 14 obj-$(CONFIG_COMPAT) += vdso-image-32.o 13 $(filter -E%,$(KBUILD_CFLAGS)) \ << 14 $(filter -march=%,$(KBUILD_CFLAGS)) \ << 15 $(filter -m%-float,$(KBUILD_CFLAGS)) \ << 16 $(CLANG_FLAGS) \ << 17 -D__VDSO__ << 18 15 19 cflags-vdso := $(ccflags-vdso) \ !! 16 vobjs := $(addprefix $(obj)/, $(vobjs-y)) 20 -isystem $(shell $(CC) -print-file-nam << 21 $(filter -W%,$(filter-out -Wa$(comma)% << 22 -O2 -g -fno-strict-aliasing -fno-commo << 23 -fno-stack-protector -fno-jump-tables << 24 $(call cc-option, -fno-asynchronous-un << 25 $(call cc-option, -fno-stack-protector << 26 aflags-vdso := $(ccflags-vdso) \ << 27 -D__ASSEMBLY__ -Wa,-gdwarf-2 << 28 17 29 ifneq ($(c-gettimeofday-y),) !! 18 $(obj)/vdso.o: $(obj)/vdso.so 30 CFLAGS_vgettimeofday.o += -include $(c-getti << 31 endif << 32 19 33 ifneq ($(c-getrandom-y),) !! 20 targets += vdso.lds $(vobjs-y) 34 CFLAGS_vgetrandom.o += -include $(c-getrando !! 21 targets += $(foreach x, 32 64, vdso-image-$(x).c vdso$(x).so vdso$(x).so.dbg) 35 endif << 36 22 37 # VDSO linker flags. !! 23 CPPFLAGS_vdso.lds += -P -C 38 ldflags-y := -Bsymbolic --no-undefined -soname << 39 $(filter -E%,$(KBUILD_CFLAGS)) -nostdl << 40 --hash-style=sysv --build-id -T << 41 24 42 # !! 25 VDSO_LDFLAGS_vdso.lds = -m elf64_sparc -soname linux-vdso.so.1 --no-undefined \ 43 # Shared build commands. !! 26 -z max-page-size=8192 44 # << 45 27 46 quiet_cmd_vdsold_and_vdso_check = LD $@ !! 28 $(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE 47 cmd_vdsold_and_vdso_check = $(cmd_ld); $ !! 29 $(call if_changed,vdso) 48 30 49 quiet_cmd_vdsoas_o_S = AS $@ !! 31 HOST_EXTRACFLAGS += -I$(srctree)/tools/include 50 cmd_vdsoas_o_S = $(CC) $(a_flags) -c -o !! 32 hostprogs += vdso2c 51 33 52 # Generate VDSO offsets using helper script !! 34 quiet_cmd_vdso2c = VDSO2C $@ 53 gen-vdsosym := $(src)/gen_vdso_offsets.sh !! 35 cmd_vdso2c = $(obj)/vdso2c $< $(<:%.dbg=%) $@ 54 quiet_cmd_vdsosym = VDSOSYM $@ << 55 cmd_vdsosym = $(NM) $< | $(gen-vdsosym) << 56 36 57 include/generated/vdso-offsets.h: $(obj)/vdso. !! 37 $(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE 58 $(call if_changed,vdsosym) !! 38 $(call if_changed,vdso2c) 59 39 60 # 40 # 61 # Build native VDSO. !! 41 # Don't omit frame pointers for ease of userspace debugging, but do >> 42 # optimize sibling calls. 62 # 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 63 48 64 native-abi := $(filter -mabi=%,$(KBUILD_CFLAGS !! 49 SPARC_REG_CFLAGS = -ffixed-g4 -ffixed-g5 -fcall-used-g5 -fcall-used-g7 65 << 66 targets += $(obj-vdso-y) << 67 targets += vdso.lds vdso.so.dbg vdso.so << 68 50 69 obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o) !! 51 $(vobjs): KBUILD_CFLAGS := $(filter-out $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL) 70 52 71 $(obj-vdso): KBUILD_CFLAGS := $(cflags-vdso) $ !! 53 # 72 $(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $ !! 54 # vDSO code runs in userspace and -pg doesn't help with profiling anyway. >> 55 # >> 56 CFLAGS_REMOVE_vclock_gettime.o = -pg >> 57 CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg 73 58 74 $(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags- !! 59 $(obj)/%.so: OBJCOPYFLAGS := -S >> 60 $(obj)/%.so: $(obj)/%.so.dbg FORCE >> 61 $(call if_changed,objcopy) 75 62 76 $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso !! 63 CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds) 77 $(call if_changed,vdsold_and_vdso_chec !! 64 VDSO_LDFLAGS_vdso32.lds = -m elf32_sparc -soname linux-gate.so.1 78 65 79 $(obj)/vdso.so: OBJCOPYFLAGS := -S !! 66 #This makes sure the $(obj) subdirectory exists even though vdso32/ 80 $(obj)/vdso.so: $(obj)/vdso.so.dbg FORCE !! 67 #is not a kbuild sub-make subdirectory 81 $(call if_changed,objcopy) !! 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) 82 97 83 obj-y += vdso.o !! 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)' '$@' 84 106 85 $(obj)/vdso.o : $(obj)/vdso.so !! 107 VDSO_LDFLAGS = -shared --hash-style=both --build-id=sha1 -Bsymbolic
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.