Message ID | 20190712054350.12300-1-naohiro.aota@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | x86/vdso, arm64/vdso: fix flip/flop vdso build bug | expand |
On Fri, Jul 12, 2019 at 2:46 PM Naohiro Aota <naohiro.aota@wdc.com> wrote: > > Two consecutive "make" on an already compiled kernel tree will show > different behavior: > > $ make > CALL scripts/checksyscalls.sh > CALL scripts/atomic/check-atomics.sh > DESCEND objtool > CHK include/generated/compile.h > VDSOCHK arch/x86/entry/vdso/vdso64.so.dbg > VDSOCHK arch/x86/entry/vdso/vdso32.so.dbg > Kernel: arch/x86/boot/bzImage is ready (#3) > Building modules, stage 2. > MODPOST 12 modules > > $ make > CALL scripts/checksyscalls.sh > CALL scripts/atomic/check-atomics.sh > DESCEND objtool > CHK include/generated/compile.h > VDSO arch/x86/entry/vdso/vdso64.so.dbg > OBJCOPY arch/x86/entry/vdso/vdso64.so > VDSO2C arch/x86/entry/vdso/vdso-image-64.c > CC arch/x86/entry/vdso/vdso-image-64.o > VDSO arch/x86/entry/vdso/vdso32.so.dbg > OBJCOPY arch/x86/entry/vdso/vdso32.so > VDSO2C arch/x86/entry/vdso/vdso-image-32.c > CC arch/x86/entry/vdso/vdso-image-32.o > AR arch/x86/entry/vdso/built-in.a > AR arch/x86/entry/built-in.a > AR arch/x86/built-in.a > GEN .version > CHK include/generated/compile.h > UPD include/generated/compile.h > CC init/version.o > AR init/built-in.a > LD vmlinux.o > <snip> > > This is causing "LD vmlinux" once every two times even without any > modifications. This is the same bug fixed in commit 92a4728608a8 > ("x86/boot: Fix if_changed build flip/flop bug"). We cannot use two > "if_changed" in one target. Fix this build bug by merging two commands > into one function. > > Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> The code looks OK, but you should split this into two patches, for arm64 and x86, and then add Fixes: for each of them.
On Fri, Jul 12, 2019 at 03:24:01PM +0900, Masahiro Yamada wrote: >On Fri, Jul 12, 2019 at 2:46 PM Naohiro Aota <naohiro.aota@wdc.com> wrote: >> >> Two consecutive "make" on an already compiled kernel tree will show >> different behavior: >> >> $ make >> CALL scripts/checksyscalls.sh >> CALL scripts/atomic/check-atomics.sh >> DESCEND objtool >> CHK include/generated/compile.h >> VDSOCHK arch/x86/entry/vdso/vdso64.so.dbg >> VDSOCHK arch/x86/entry/vdso/vdso32.so.dbg >> Kernel: arch/x86/boot/bzImage is ready (#3) >> Building modules, stage 2. >> MODPOST 12 modules >> >> $ make >> CALL scripts/checksyscalls.sh >> CALL scripts/atomic/check-atomics.sh >> DESCEND objtool >> CHK include/generated/compile.h >> VDSO arch/x86/entry/vdso/vdso64.so.dbg >> OBJCOPY arch/x86/entry/vdso/vdso64.so >> VDSO2C arch/x86/entry/vdso/vdso-image-64.c >> CC arch/x86/entry/vdso/vdso-image-64.o >> VDSO arch/x86/entry/vdso/vdso32.so.dbg >> OBJCOPY arch/x86/entry/vdso/vdso32.so >> VDSO2C arch/x86/entry/vdso/vdso-image-32.c >> CC arch/x86/entry/vdso/vdso-image-32.o >> AR arch/x86/entry/vdso/built-in.a >> AR arch/x86/entry/built-in.a >> AR arch/x86/built-in.a >> GEN .version >> CHK include/generated/compile.h >> UPD include/generated/compile.h >> CC init/version.o >> AR init/built-in.a >> LD vmlinux.o >> <snip> >> >> This is causing "LD vmlinux" once every two times even without any >> modifications. This is the same bug fixed in commit 92a4728608a8 >> ("x86/boot: Fix if_changed build flip/flop bug"). We cannot use two >> "if_changed" in one target. Fix this build bug by merging two commands >> into one function. >> >> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> > > >The code looks OK, but you should split this >into two patches, for arm64 and x86, >and then add Fixes: for each of them. Thanks, I'll split and add the tags. > > >-- >Best Regards >Masahiro Yamada
diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile index 4ab863045188..068c614b1231 100644 --- a/arch/arm64/kernel/vdso/Makefile +++ b/arch/arm64/kernel/vdso/Makefile @@ -57,8 +57,7 @@ $(obj)/vdso.o : $(obj)/vdso.so # Link rule for the .so file, .lds has to be first $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE - $(call if_changed,ld) - $(call if_changed,vdso_check) + $(call if_changed,ld_and_vdso_check) # Strip rule for the .so file $(obj)/%.so: OBJCOPYFLAGS := -S @@ -77,6 +76,9 @@ include/generated/vdso-offsets.h: $(obj)/vdso.so.dbg FORCE quiet_cmd_vdsocc = VDSOCC $@ cmd_vdsocc = $(CC) $(a_flags) $(c_flags) -c -o $@ $< +quiet_cmd_ld_and_vdso_check = LD $@ + cmd_ld_and_vdso_check = $(cmd_ld); $(cmd_vdso_check) + # Install commands for the unstripped file quiet_cmd_vdso_install = INSTALL $@ cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@ diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile index 39106111be86..34773395139a 100644 --- a/arch/x86/entry/vdso/Makefile +++ b/arch/x86/entry/vdso/Makefile @@ -56,8 +56,7 @@ VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -soname linux-vdso.so.1 --no-undefined \ -z max-page-size=4096 $(obj)/vdso64.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE - $(call if_changed,vdso) - $(call if_changed,vdso_check) + $(call if_changed,vdso_and_check) HOST_EXTRACFLAGS += -I$(srctree)/tools/include -I$(srctree)/include/uapi -I$(srctree)/arch/$(SUBARCH)/include/uapi hostprogs-y += vdso2c @@ -127,8 +126,7 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE $(call if_changed,objcopy) $(obj)/vdsox32.so.dbg: $(obj)/vdsox32.lds $(vobjx32s) FORCE - $(call if_changed,vdso) - $(call if_changed,vdso_check) + $(call if_changed,vdso_and_check) CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds) VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -soname linux-gate.so.1 @@ -167,8 +165,7 @@ $(obj)/vdso32.so.dbg: FORCE \ $(obj)/vdso32/note.o \ $(obj)/vdso32/system_call.o \ $(obj)/vdso32/sigreturn.o - $(call if_changed,vdso) - $(call if_changed,vdso_check) + $(call if_changed,vdso_and_check) # # The DSO images are built using a special linker script. @@ -184,6 +181,9 @@ VDSO_LDFLAGS = -shared $(call ld-option, --hash-style=both) \ -Bsymbolic GCOV_PROFILE := n +quiet_cmd_vdso_and_check = VDSO $@ + cmd_vdso_and_check = $(cmd_vdso); $(cmd_vdso_check) + # # Install the unstripped copies of vdso*.so. If our toolchain supports # build-id, install .build-id links as well.
Two consecutive "make" on an already compiled kernel tree will show different behavior: $ make CALL scripts/checksyscalls.sh CALL scripts/atomic/check-atomics.sh DESCEND objtool CHK include/generated/compile.h VDSOCHK arch/x86/entry/vdso/vdso64.so.dbg VDSOCHK arch/x86/entry/vdso/vdso32.so.dbg Kernel: arch/x86/boot/bzImage is ready (#3) Building modules, stage 2. MODPOST 12 modules $ make CALL scripts/checksyscalls.sh CALL scripts/atomic/check-atomics.sh DESCEND objtool CHK include/generated/compile.h VDSO arch/x86/entry/vdso/vdso64.so.dbg OBJCOPY arch/x86/entry/vdso/vdso64.so VDSO2C arch/x86/entry/vdso/vdso-image-64.c CC arch/x86/entry/vdso/vdso-image-64.o VDSO arch/x86/entry/vdso/vdso32.so.dbg OBJCOPY arch/x86/entry/vdso/vdso32.so VDSO2C arch/x86/entry/vdso/vdso-image-32.c CC arch/x86/entry/vdso/vdso-image-32.o AR arch/x86/entry/vdso/built-in.a AR arch/x86/entry/built-in.a AR arch/x86/built-in.a GEN .version CHK include/generated/compile.h UPD include/generated/compile.h CC init/version.o AR init/built-in.a LD vmlinux.o <snip> This is causing "LD vmlinux" once every two times even without any modifications. This is the same bug fixed in commit 92a4728608a8 ("x86/boot: Fix if_changed build flip/flop bug"). We cannot use two "if_changed" in one target. Fix this build bug by merging two commands into one function. Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> --- arch/arm64/kernel/vdso/Makefile | 6 ++++-- arch/x86/entry/vdso/Makefile | 12 ++++++------ 2 files changed, 10 insertions(+), 8 deletions(-)