1 # SPDX-License-Identifier: GPL-2.0 !! 1 # SPDX-License-Identifier: GPL-2.0-only >> 2 # >> 3 # Building vDSO images for sparc. >> 4 # 2 5 3 # Include the generic Makefile to check the bu !! 6 # files to link into the vdso 4 include $(srctree)/lib/vdso/Makefile !! 7 vobjs-y := vdso-note.o vclock_gettime.o 5 8 6 hostprogs := vdsomunge !! 9 # files to link into kernel >> 10 obj-y += vma.o 7 11 8 obj-vdso := vgettimeofday.o datapage.o note.o !! 12 # vDSO images to build >> 13 obj-$(CONFIG_SPARC64) += vdso-image-64.o >> 14 obj-$(CONFIG_COMPAT) += vdso-image-32.o 9 15 10 # Build rules !! 16 vobjs := $(addprefix $(obj)/, $(vobjs-y)) 11 targets := $(obj-vdso) vdso.so vdso.so.dbg vds << 12 obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) << 13 17 14 ccflags-y := -fPIC -fno-common -fno-builtin -f !! 18 $(obj)/vdso.o: $(obj)/vdso.so 15 ccflags-y += -DDISABLE_BRANCH_PROFILING -DBUIL << 16 19 17 ldflags-$(CONFIG_CPU_ENDIAN_BE8) := --be8 !! 20 targets += vdso.lds $(vobjs-y) 18 ldflags-y := -Bsymbolic --no-undefined -soname !! 21 targets += $(foreach x, 32 64, vdso-image-$(x).c vdso$(x).so vdso$(x).so.dbg) 19 -z max-page-size=4096 -shared $(ld << 20 --hash-style=sysv --build-id=sha1 << 21 -T << 22 22 23 obj-$(CONFIG_VDSO) += vdso.o !! 23 CPPFLAGS_vdso.lds += -P -C 24 CPPFLAGS_vdso.lds += -P -C -U$(ARCH) << 25 24 26 CFLAGS_REMOVE_vdso.o = -pg !! 25 VDSO_LDFLAGS_vdso.lds = -m elf64_sparc -soname linux-vdso.so.1 --no-undefined \ >> 26 -z max-page-size=8192 27 27 28 # Force -O2 to avoid libgcc dependencies !! 28 $(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE 29 CFLAGS_REMOVE_vgettimeofday.o = -pg -Os $(RAND !! 29 $(call if_changed,vdso) 30 ifeq ($(c-gettimeofday-y),) << 31 CFLAGS_vgettimeofday.o = -O2 << 32 else << 33 CFLAGS_vgettimeofday.o = -O2 -include $(c-gett << 34 endif << 35 30 36 # Force dependency !! 31 HOST_EXTRACFLAGS += -I$(srctree)/tools/include 37 $(obj)/vdso.o : $(obj)/vdso.so !! 32 hostprogs += vdso2c 38 33 39 # Link rule for the .so file !! 34 quiet_cmd_vdso2c = VDSO2C $@ 40 $(obj)/vdso.so.raw: $(obj)/vdso.lds $(obj-vdso !! 35 cmd_vdso2c = $(obj)/vdso2c $< $(<:%.dbg=%) $@ 41 $(call if_changed,vdsold_and_vdso_chec << 42 36 43 $(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/ !! 37 $(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE 44 $(call if_changed,vdsomunge) !! 38 $(call if_changed,vdso2c) >> 39 >> 40 # >> 41 # Don't omit frame pointers for ease of userspace debugging, but do >> 42 # optimize sibling calls. >> 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 >> 48 >> 49 SPARC_REG_CFLAGS = -ffixed-g4 -ffixed-g5 -fcall-used-g5 -fcall-used-g7 >> 50 >> 51 $(vobjs): KBUILD_CFLAGS := $(filter-out $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL) >> 52 >> 53 # >> 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 45 58 46 # Strip rule for the .so file << 47 $(obj)/%.so: OBJCOPYFLAGS := -S 59 $(obj)/%.so: OBJCOPYFLAGS := -S 48 $(obj)/%.so: $(obj)/%.so.dbg FORCE 60 $(obj)/%.so: $(obj)/%.so.dbg FORCE 49 $(call if_changed,objcopy) 61 $(call if_changed,objcopy) 50 62 51 # Actual build commands !! 63 CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds) 52 quiet_cmd_vdsold_and_vdso_check = LD $@ !! 64 VDSO_LDFLAGS_vdso32.lds = -m elf32_sparc -soname linux-gate.so.1 53 cmd_vdsold_and_vdso_check = $(cmd_ld); $ !! 65 >> 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)' '$@' 54 106 55 quiet_cmd_vdsomunge = MUNGE $@ !! 107 VDSO_LDFLAGS = -shared --hash-style=both --build-id=sha1 -Bsymbolic 56 cmd_vdsomunge = $(objtree)/$(obj)/vdsomu <<
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.