Makefile 4.58 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0-only
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#
# Building vDSO images for sparc.
#

KBUILD_CFLAGS += $(DISABLE_LTO)

VDSO64-$(CONFIG_SPARC64)	:= y
VDSOCOMPAT-$(CONFIG_COMPAT)	:= y

# files to link into the vdso
vobjs-y := vdso-note.o vclock_gettime.o

# files to link into kernel
obj-y				+= vma.o

# vDSO images to build
vdso_img-$(VDSO64-y)		+= 64
vdso_img-$(VDSOCOMPAT-y)	+= 32

vobjs := $(foreach F,$(vobjs-y),$(obj)/$F)

$(obj)/vdso.o: $(obj)/vdso.so

targets += vdso.lds $(vobjs-y)

# Build the vDSO image C files and link them in.
vdso_img_objs := $(vdso_img-y:%=vdso-image-%.o)
vdso_img_cfiles := $(vdso_img-y:%=vdso-image-%.c)
vdso_img_sodbg := $(vdso_img-y:%=vdso%.so.dbg)
obj-y += $(vdso_img_objs)
targets += $(vdso_img_cfiles)
33
targets += $(vdso_img_sodbg) $(vdso_img-y:%=vdso%.so)
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
34

35
CPPFLAGS_vdso.lds += -P -C
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
36

37
VDSO_LDFLAGS_vdso.lds = -m elf64_sparc -soname linux-vdso.so.1 --no-undefined \
38
			-z max-page-size=8192
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
39

40
$(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
41 42 43
	$(call if_changed,vdso)

HOST_EXTRACFLAGS += -I$(srctree)/tools/include
44
hostprogs += vdso2c
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
45 46

quiet_cmd_vdso2c = VDSO2C  $@
47
      cmd_vdso2c = $(obj)/vdso2c $< $(<:%.dbg=%) $@
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
48 49 50 51 52 53 54 55

$(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE
	$(call if_changed,vdso2c)

#
# Don't omit frame pointers for ease of userspace debugging, but do
# optimize sibling calls.
#
56
CFL := $(PROFILING) -mcmodel=medlow -fPIC -O2 -fasynchronous-unwind-tables -m64 \
57
       $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \
58
       -fno-omit-frame-pointer -foptimize-sibling-calls \
59
       -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
60

61 62 63
SPARC_REG_CFLAGS = -ffixed-g4 -ffixed-g5 -fcall-used-g5 -fcall-used-g7

$(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
64 65 66 67 68

#
# vDSO code runs in userspace and -pg doesn't help with profiling anyway.
#
CFLAGS_REMOVE_vclock_gettime.o = -pg
69
CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
70 71

$(obj)/%.so: OBJCOPYFLAGS := -S
72
$(obj)/%.so: $(obj)/%.so.dbg FORCE
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
73 74
	$(call if_changed,objcopy)

75
CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds)
76
VDSO_LDFLAGS_vdso32.lds = -m elf32_sparc -soname linux-gate.so.1
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

#This makes sure the $(obj) subdirectory exists even though vdso32/
#is not a kbuild sub-make subdirectory
override obj-dirs = $(dir $(obj)) $(obj)/vdso32/

targets += vdso32/vdso32.lds
targets += vdso32/vdso-note.o
targets += vdso32/vclock_gettime.o

KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS)) -DBUILD_VDSO
$(obj)/vdso32.so.dbg: KBUILD_AFLAGS = $(KBUILD_AFLAGS_32)
$(obj)/vdso32.so.dbg: asflags-$(CONFIG_SPARC64) += -m32

KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS))
KBUILD_CFLAGS_32 := $(filter-out -mcmodel=medlow,$(KBUILD_CFLAGS_32))
KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32))
KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32))
94 95
KBUILD_CFLAGS_32 := $(filter-out $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS_32))
KBUILD_CFLAGS_32 += -m32 -msoft-float -fpic
96
KBUILD_CFLAGS_32 += -fno-stack-protector
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls)
KBUILD_CFLAGS_32 += -fno-omit-frame-pointer
KBUILD_CFLAGS_32 += -DDISABLE_BRANCH_PROFILING
KBUILD_CFLAGS_32 += -mv8plus
$(obj)/vdso32.so.dbg: KBUILD_CFLAGS = $(KBUILD_CFLAGS_32)

$(obj)/vdso32.so.dbg: FORCE \
			$(obj)/vdso32/vdso32.lds \
			$(obj)/vdso32/vclock_gettime.o \
			$(obj)/vdso32/vdso-note.o
		$(call	if_changed,vdso)

#
# The DSO images are built using a special linker script.
#
quiet_cmd_vdso = VDSO    $@
113
      cmd_vdso = $(LD) -nostdlib -o $@ \
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
114
		       $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
115 116
		       -T $(filter %.lds,$^) $(filter %.o,$^) && \
		sh $(srctree)/$(src)/checkundef.sh '$(OBJDUMP)' '$@'
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
117

118
VDSO_LDFLAGS = -shared --hash-style=both --build-id -Bsymbolic
Nagarathnam Muthusamy's avatar
Nagarathnam Muthusamy committed
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
GCOV_PROFILE := n

#
# Install the unstripped copies of vdso*.so.  If our toolchain supports
# build-id, install .build-id links as well.
#
quiet_cmd_vdso_install = INSTALL $(@:install_%=%)
define cmd_vdso_install
	cp $< "$(MODLIB)/vdso/$(@:install_%=%)"; \
	if readelf -n $< |grep -q 'Build ID'; then \
	  buildid=`readelf -n $< |grep 'Build ID' |sed -e 's/^.*Build ID: \(.*\)$$/\1/'`; \
	  first=`echo $$buildid | cut -b-2`; \
	  last=`echo $$buildid | cut -b3-`; \
	  mkdir -p "$(MODLIB)/vdso/.build-id/$$first"; \
	  ln -sf "../../$(@:install_%=%)" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \
	fi
endef

vdso_img_insttargets := $(vdso_img_sodbg:%.dbg=install_%)

$(MODLIB)/vdso: FORCE
	@mkdir -p $(MODLIB)/vdso

$(vdso_img_insttargets): install_%: $(obj)/%.dbg $(MODLIB)/vdso FORCE
	$(call cmd,vdso_install)

PHONY += vdso_install $(vdso_img_insttargets)
vdso_install: $(vdso_img_insttargets) FORCE