Message ID | 20160708112759.GA22099@e104818-lin.cambridge.arm.com |
---|---|
State | Accepted |
Commit | 90f777beb788d08300f4a1482cb4fd37a401b472 |
Headers | show |
On Mon, Jul 11, 2016 at 04:29:26PM +0100, Kevin Brodsky wrote: > On 08/07/16 12:27, Catalin Marinas wrote: > >On Thu, May 12, 2016 at 05:39:15PM +0100, Kevin Brodsky wrote: > >>I am not completely satisfied with the fix, since it uses a hack with > >>the prepare and prepare0 rules that should not be used in arch > >>Makefiles. However, all of my other attempts (including explicit > >>dependencies on gettimeofday.S, etc. in arm64/kernel/Makefile) failed > >>in some way. Hopefully, a Makefile wizard will come up with a better > >>solution. > >This is the patch I'm going to push to arm64 for-next/core. Thanks for > >the report and attempt at fixing it, it saved me from trying to > >understand what was going on: > > First, thanks for taking care of this! Sorry for the delay in replying, I've been > having trouble recently with my email client not showing up new messages in subfolders... > > Now, unfortunately, I had already tried this solution (I think almost exactly this > patch in fact), and it does not work. I confirmed this just now by applying the patch > on master and compiling from a clean tree.The compilation of signal.c failed with: I noticed this as well after an mrproper. The code seemed to be compiled in order as long as there was an original generated/asm-offsets.h in place. > Therefore, please do not merge this patch, it can break the compilation quite easily. Too late ;). But I'm reverting it now. > > This indeed looks dodgy. I'm not sure about the makefile rules but would the above > > override the "prepare" target in the top Makefile? > > Rules are cumulative, they do not override each other. I am only making > "vdso_prepare" an additional prerequisite of "prepare", with "vdso_prepare" depending > on "prepare0" to ensure that asm-offsets.h is generated first. What is dodgy is that > we are not supposed to add prerequisites to "prepare" in arch Makefiles, but again, I > don't see how we can avoid doing that here. It seems to me that this is an oversight > in the top-level Makefile, and I don't think that adding a prerequisite to "prepare" > is unreasonable. I'll merge your patch. An alternative would be to parse the vdso ELF at run-time in the kernel and generate the offsets. -- Catalin _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index 7700c0c23962..b4f0a03dc830 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile @@ -54,6 +54,7 @@ obj-m += $(arm64-obj-m) head-y := head.o extra-y += $(head-y) vmlinux.lds -# vDSO - this must be built first to generate the symbol offsets -$(call objectify,$(arm64-obj-y)): $(obj)/vdso/vdso-offsets.h -$(obj)/vdso/vdso-offsets.h: $(obj)/vdso +# Check that the vDSO symbol offsets header file is up to date and re-generate +# it if necessary. +$(objtree)/include/generated/vdso-offsets.h: FORCE + $(Q)$(MAKE) $(build)=$(obj)/vdso $@ diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile index b467fd0a384b..70fb663ddf7b 100644 --- a/arch/arm64/kernel/vdso/Makefile +++ b/arch/arm64/kernel/vdso/Makefile @@ -23,7 +23,7 @@ GCOV_PROFILE := n ccflags-y += -Wl,-shared obj-y += vdso.o -extra-y += vdso.lds vdso-offsets.h +extra-y += vdso.lds CPPFLAGS_vdso.lds += -P -C -U$(ARCH) # Force dependency (incbin is bad) @@ -42,11 +42,10 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE gen-vdsosym := $(srctree)/$(src)/gen_vdso_offsets.sh quiet_cmd_vdsosym = VDSOSYM $@ define cmd_vdsosym - $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ && \ - cp $@ include/generated/ + $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ endef -$(obj)/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE +$(objtree)/include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg $(call if_changed,vdsosym) # Assembly rules for the .S files