arm64: do not descend to vdso directories twice
arm64 descends into each vdso directory twice; first in vdso_prepare, second during the ordinary build process. PPC mimicked it and uncovered a problem [1]. In the first descend, Kbuild directly visits the vdso directories, therefore it does not inherit subdir-ccflags-y from upper directories. This means the command line parameters may differ between the two. If it happens, the offset values in the generated headers might be different from real offsets of vdso.so in the kernel. This potential danger should be avoided. The vdso directories are built in the vdso_prepare stage, so the second descend is unneeded. [1]: https://lore.kernel.org/linux-kbuild/CAK7LNARAkJ3_-4gX0VA2UkapbOftuzfSTVMBbgbw=HD8n7N+7w@mail.gmail.com/T/#ma10dcb961fda13f36d42d58fa6cb2da988b7e73a Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Link: https://lore.kernel.org/r/20201218024540.1102650-1-masahiroy@kernel.org Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
19c329f680
commit
a5b8ca97fb
|
@ -188,10 +188,12 @@ ifeq ($(KBUILD_EXTMOD),)
|
||||||
# this hack.
|
# this hack.
|
||||||
prepare: vdso_prepare
|
prepare: vdso_prepare
|
||||||
vdso_prepare: prepare0
|
vdso_prepare: prepare0
|
||||||
$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso include/generated/vdso-offsets.h
|
$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso \
|
||||||
$(if $(CONFIG_COMPAT_VDSO),$(Q)$(MAKE) \
|
include/generated/vdso-offsets.h arch/arm64/kernel/vdso/vdso.so
|
||||||
$(build)=arch/arm64/kernel/vdso32 \
|
ifdef CONFIG_COMPAT_VDSO
|
||||||
include/generated/vdso32-offsets.h)
|
$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 \
|
||||||
|
include/generated/vdso32-offsets.h arch/arm64/kernel/vdso32/vdso.so
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
define archhelp
|
define archhelp
|
||||||
|
|
|
@ -59,9 +59,10 @@ obj-$(CONFIG_CRASH_CORE) += crash_core.o
|
||||||
obj-$(CONFIG_ARM_SDE_INTERFACE) += sdei.o
|
obj-$(CONFIG_ARM_SDE_INTERFACE) += sdei.o
|
||||||
obj-$(CONFIG_ARM64_PTR_AUTH) += pointer_auth.o
|
obj-$(CONFIG_ARM64_PTR_AUTH) += pointer_auth.o
|
||||||
obj-$(CONFIG_ARM64_MTE) += mte.o
|
obj-$(CONFIG_ARM64_MTE) += mte.o
|
||||||
|
obj-y += vdso-wrap.o
|
||||||
|
obj-$(CONFIG_COMPAT_VDSO) += vdso32-wrap.o
|
||||||
|
|
||||||
obj-y += vdso/ probes/
|
obj-y += probes/
|
||||||
obj-$(CONFIG_COMPAT_VDSO) += vdso32/
|
|
||||||
head-y := head.o
|
head-y := head.o
|
||||||
extra-y += $(head-y) vmlinux.lds
|
extra-y += $(head-y) vmlinux.lds
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,6 @@ endif
|
||||||
# Disable gcov profiling for VDSO code
|
# Disable gcov profiling for VDSO code
|
||||||
GCOV_PROFILE := n
|
GCOV_PROFILE := n
|
||||||
|
|
||||||
obj-y += vdso.o
|
|
||||||
targets += vdso.lds
|
targets += vdso.lds
|
||||||
CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
|
CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,6 @@ c-obj-vdso-gettimeofday := $(addprefix $(obj)/, $(c-obj-vdso-gettimeofday))
|
||||||
asm-obj-vdso := $(addprefix $(obj)/, $(asm-obj-vdso))
|
asm-obj-vdso := $(addprefix $(obj)/, $(asm-obj-vdso))
|
||||||
obj-vdso := $(c-obj-vdso) $(c-obj-vdso-gettimeofday) $(asm-obj-vdso)
|
obj-vdso := $(c-obj-vdso) $(c-obj-vdso-gettimeofday) $(asm-obj-vdso)
|
||||||
|
|
||||||
obj-y += vdso.o
|
|
||||||
targets += vdso.lds
|
targets += vdso.lds
|
||||||
CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
|
CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue