mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 05:11:48 +00:00
f80f6531b4
When CONFIG_VDSO=n, the build normally does not enter arch/arm/vdso/ because arch/arm/Makefile does not add it to core-y. However, if the user runs 'make arch/arm/vdso/' the VDSO targets will get visited. This is because the VDSO Makefile itself does not consider the value of CONFIG_VDSO. It is arguably better and more consistent behavior to generate an empty built-in.o when CONFIG_VDSO=n and the user attempts to build arch/arm/vdso/. It's nicer because it doesn't try to build things that Kconfig dependencies are there to prevent (e.g. the dependency on AEABI), and it's less confusing than building objects that won't be used in the final image. Signed-off-by: Nathan Lynch <nathan_lynch@mentor.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
75 lines
2.2 KiB
Makefile
75 lines
2.2 KiB
Makefile
hostprogs-y := vdsomunge
|
|
|
|
obj-vdso := vgettimeofday.o datapage.o
|
|
|
|
# Build rules
|
|
targets := $(obj-vdso) vdso.so vdso.so.dbg vdso.so.raw vdso.lds
|
|
obj-vdso := $(addprefix $(obj)/, $(obj-vdso))
|
|
|
|
ccflags-y := -shared -fPIC -fno-common -fno-builtin -fno-stack-protector
|
|
ccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 -DDISABLE_BRANCH_PROFILING
|
|
ccflags-y += -Wl,--no-undefined $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
|
|
|
|
obj-$(CONFIG_VDSO) += vdso.o
|
|
extra-$(CONFIG_VDSO) += vdso.lds
|
|
CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
|
|
|
|
CFLAGS_REMOVE_vdso.o = -pg
|
|
|
|
# Force -O2 to avoid libgcc dependencies
|
|
CFLAGS_REMOVE_vgettimeofday.o = -pg -Os
|
|
CFLAGS_vgettimeofday.o = -O2
|
|
|
|
# Disable gcov profiling for VDSO code
|
|
GCOV_PROFILE := n
|
|
|
|
# Force dependency
|
|
$(obj)/vdso.o : $(obj)/vdso.so
|
|
|
|
# Link rule for the .so file
|
|
$(obj)/vdso.so.raw: $(src)/vdso.lds $(obj-vdso) FORCE
|
|
$(call if_changed,vdsold)
|
|
|
|
$(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/vdsomunge FORCE
|
|
$(call if_changed,vdsomunge)
|
|
|
|
# Strip rule for the .so file
|
|
$(obj)/%.so: OBJCOPYFLAGS := -S
|
|
$(obj)/%.so: $(obj)/%.so.dbg FORCE
|
|
$(call if_changed,objcopy)
|
|
|
|
# Actual build commands
|
|
quiet_cmd_vdsold = VDSO $@
|
|
cmd_vdsold = $(CC) $(c_flags) -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) \
|
|
$(call cc-ldoption, -Wl$(comma)--build-id) \
|
|
-Wl,-Bsymbolic -Wl,-z,max-page-size=4096 \
|
|
-Wl,-z,common-page-size=4096 -o $@
|
|
|
|
quiet_cmd_vdsomunge = MUNGE $@
|
|
cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@
|
|
|
|
#
|
|
# Install the unstripped copy of vdso.so.dbg. If our toolchain
|
|
# supports build-id, install .build-id links as well.
|
|
#
|
|
# Cribbed from arch/x86/vdso/Makefile.
|
|
#
|
|
quiet_cmd_vdso_install = INSTALL $<
|
|
define cmd_vdso_install
|
|
cp $< "$(MODLIB)/vdso/vdso.so"; \
|
|
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 "../../vdso.so" "$(MODLIB)/vdso/.build-id/$$first/$$last.debug"; \
|
|
fi
|
|
endef
|
|
|
|
$(MODLIB)/vdso: FORCE
|
|
@mkdir -p $(MODLIB)/vdso
|
|
|
|
PHONY += vdso_install
|
|
vdso_install: $(obj)/vdso.so.dbg $(MODLIB)/vdso FORCE
|
|
$(call cmd,vdso_install)
|