1 # SPDX-License-Identifier: GPL-2.0 !! 1 # SPDX-License-Identifier: GPL-2.0-only >> 2 # >> 3 # Building vDSO images for sparc. >> 4 # >> 5 UBSAN_SANITIZE := n 2 6 3 # Include the generic Makefile to check the bu !! 7 # files to link into the vdso 4 include $(srctree)/lib/vdso/Makefile !! 8 vobjs-y := vdso-note.o vclock_gettime.o 5 9 6 hostprogs := vdsomunge !! 10 # files to link into kernel >> 11 obj-y += vma.o 7 12 8 obj-vdso := vgettimeofday.o datapage.o note.o !! 13 # vDSO images to build >> 14 obj-$(CONFIG_SPARC64) += vdso-image-64.o >> 15 obj-$(CONFIG_COMPAT) += vdso-image-32.o 9 16 10 # Build rules !! 17 vobjs := $(addprefix $(obj)/, $(vobjs-y)) 11 targets := $(obj-vdso) vdso.so vdso.so.dbg vds << 12 obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) << 13 18 14 ccflags-y := -fPIC -fno-common -fno-builtin -f !! 19 $(obj)/vdso.o: $(obj)/vdso.so 15 ccflags-y += -DDISABLE_BRANCH_PROFILING -DBUIL << 16 20 17 ldflags-$(CONFIG_CPU_ENDIAN_BE8) := --be8 !! 21 targets += vdso.lds $(vobjs-y) 18 ldflags-y := -Bsymbolic --no-undefined -soname !! 22 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 23 23 obj-$(CONFIG_VDSO) += vdso.o !! 24 CPPFLAGS_vdso.lds += -P -C 24 CPPFLAGS_vdso.lds += -P -C -U$(ARCH) << 25 25 26 CFLAGS_REMOVE_vdso.o = -pg !! 26 VDSO_LDFLAGS_vdso.lds = -m elf64_sparc -soname linux-vdso.so.1 --no-undefined \ >> 27 -z max-page-size=8192 27 28 28 # Force -O2 to avoid libgcc dependencies !! 29 $(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE 29 CFLAGS_REMOVE_vgettimeofday.o = -pg -Os $(RAND !! 30 $(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 31 36 # Force dependency !! 32 HOST_EXTRACFLAGS += -I$(srctree)/tools/include 37 $(obj)/vdso.o : $(obj)/vdso.so !! 33 hostprogs += vdso2c 38 34 39 # Link rule for the .so file !! 35 quiet_cmd_vdso2c = VDSO2C $@ 40 $(obj)/vdso.so.raw: $(obj)/vdso.lds $(obj-vdso !! 36 cmd_vdso2c = $(obj)/vdso2c $< $(<:%.dbg=%) $@ 41 $(call if_changed,vdsold_and_vdso_chec << 42 37 43 $(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/ !! 38 $(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE 44 $(call if_changed,vdsomunge) !! 39 $(call if_changed,vdso2c) >> 40 >> 41 # >> 42 # Don't omit frame pointers for ease of userspace debugging, but do >> 43 # optimize sibling calls. >> 44 # >> 45 CFL := $(PROFILING) -mcmodel=medlow -fPIC -O2 -fasynchronous-unwind-tables -m64 \ >> 46 $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \ >> 47 -fno-omit-frame-pointer -foptimize-sibling-calls \ >> 48 -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO >> 49 >> 50 SPARC_REG_CFLAGS = -ffixed-g4 -ffixed-g5 -fcall-used-g5 -fcall-used-g7 >> 51 >> 52 $(vobjs): KBUILD_CFLAGS := $(filter-out $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL) >> 53 >> 54 # >> 55 # vDSO code runs in userspace and -pg doesn't help with profiling anyway. >> 56 # >> 57 CFLAGS_REMOVE_vclock_gettime.o = -pg >> 58 CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg 45 59 46 # Strip rule for the .so file << 47 $(obj)/%.so: OBJCOPYFLAGS := -S 60 $(obj)/%.so: OBJCOPYFLAGS := -S 48 $(obj)/%.so: $(obj)/%.so.dbg FORCE 61 $(obj)/%.so: $(obj)/%.so.dbg FORCE 49 $(call if_changed,objcopy) 62 $(call if_changed,objcopy) 50 63 51 # Actual build commands !! 64 CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds) 52 quiet_cmd_vdsold_and_vdso_check = LD $@ !! 65 VDSO_LDFLAGS_vdso32.lds = -m elf32_sparc -soname linux-gate.so.1 53 cmd_vdsold_and_vdso_check = $(cmd_ld); $ !! 66 >> 67 #This makes sure the $(obj) subdirectory exists even though vdso32/ >> 68 #is not a kbuild sub-make subdirectory >> 69 override obj-dirs = $(dir $(obj)) $(obj)/vdso32/ >> 70 >> 71 targets += vdso32/vdso32.lds >> 72 targets += vdso32/vdso-note.o >> 73 targets += vdso32/vclock_gettime.o >> 74 >> 75 KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS)) -DBUILD_VDSO >> 76 $(obj)/vdso32.so.dbg: KBUILD_AFLAGS = $(KBUILD_AFLAGS_32) >> 77 $(obj)/vdso32.so.dbg: asflags-$(CONFIG_SPARC64) += -m32 >> 78 >> 79 KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS)) >> 80 KBUILD_CFLAGS_32 := $(filter-out -mcmodel=medlow,$(KBUILD_CFLAGS_32)) >> 81 KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32)) >> 82 KBUILD_CFLAGS_32 := $(filter-out $(RANDSTRUCT_CFLAGS),$(KBUILD_CFLAGS_32)) >> 83 KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32)) >> 84 KBUILD_CFLAGS_32 := $(filter-out $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS_32)) >> 85 KBUILD_CFLAGS_32 += -m32 -msoft-float -fpic >> 86 KBUILD_CFLAGS_32 += -fno-stack-protector >> 87 KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls) >> 88 KBUILD_CFLAGS_32 += -fno-omit-frame-pointer >> 89 KBUILD_CFLAGS_32 += -DDISABLE_BRANCH_PROFILING >> 90 KBUILD_CFLAGS_32 += -mv8plus >> 91 $(obj)/vdso32.so.dbg: KBUILD_CFLAGS = $(KBUILD_CFLAGS_32) >> 92 >> 93 $(obj)/vdso32.so.dbg: FORCE \ >> 94 $(obj)/vdso32/vdso32.lds \ >> 95 $(obj)/vdso32/vclock_gettime.o \ >> 96 $(obj)/vdso32/vdso-note.o >> 97 $(call if_changed,vdso) >> 98 >> 99 # >> 100 # The DSO images are built using a special linker script. >> 101 # >> 102 quiet_cmd_vdso = VDSO $@ >> 103 cmd_vdso = $(LD) -nostdlib -o $@ \ >> 104 $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ >> 105 -T $(filter %.lds,$^) $(filter %.o,$^) && \ >> 106 sh $(srctree)/$(src)/checkundef.sh '$(OBJDUMP)' '$@' 54 107 55 quiet_cmd_vdsomunge = MUNGE $@ !! 108 VDSO_LDFLAGS = -shared --hash-style=both --build-id=sha1 -Bsymbolic 56 cmd_vdsomunge = $(objtree)/$(obj)/vdsomu !! 109 GCOV_PROFILE := n
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.