Re: possible dependency error?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Necromancing an old thread, since it identifies the same problem I've
been poking at recently:

On Thu, May 18, 2023 at 05:26:28PM +0900, Masahiro Yamada wrote:
> (+CC: Josh Poimboeuf,Peter Zijlstra, objtool maintainer)
> 
> On Thu, May 18, 2023 at 8:27 AM Bjorn Helgaas <helgaas@xxxxxxxxxx> wrote:
> >
> > This is on v6.4-rc1.  I fat-fingered the make target (I intended
> > "pciehp.o", not "pciehp.c"), then interrupted the build when I noticed
> > my mistake:
> >
> >   06:04:15 ~/linux (hotplug)$ make drivers/pci/hotplug/pciehp.c
> >     SYNC    include/config/auto.conf.cmd
> >   ^Cmake: *** [include/config/auto.conf.cmd] Deleting file 'include/generated/rustc_cfg'
> >   make: *** [include/config/auto.conf.cmd] Deleting file 'include/generated/autoconf.h'
> >   make[2]: *** [scripts/kconfig/Makefile:77: syncconfig] Interrupt
> >   make[1]: *** [Makefile:692: syncconfig] Interrupt
> >   make: *** [Makefile:793: include/config/auto.conf.cmd] Interrupt
> >
> > Subsequent builds now fail ("pciehp.o" is *also* an incorrect target,
> > but doesn't seem related to the error):
> >
> >   06:04:22 ~/linux (hotplug)$ make drivers/pci/hotplug/pciehp.o
> >     SYNC    include/config/auto.conf.cmd
> >     UPD     include/config/kernel.release
> >     UPD     include/generated/utsrelease.h
> >     UPD     include/generated/compile.h
> >     CC      scripts/mod/empty.o
> >     MKELF   scripts/mod/elfconfig.h
> >     HOSTCC  scripts/mod/modpost.o
> >     CC      scripts/mod/devicetable-offsets.s
> >     HOSTCC  scripts/mod/file2alias.o
> >     HOSTCC  scripts/mod/sumversion.o
> >     HOSTLD  scripts/mod/modpost
> >     CC      kernel/bounds.s
> >     CC      arch/x86/kernel/asm-offsets.s
> >     CALL    scripts/checksyscalls.sh
> >     DESCEND objtool
> >     HOSTCC  /home/bjorn/linux/tools/objtool/fixdep.o
> >     HOSTLD  /home/bjorn/linux/tools/objtool/fixdep-in.o
> >     LINK    /home/bjorn/linux/tools/objtool/fixdep
> >   make[4]: *** No rule to make target '/usr/include/x86_64-linux-gnu/bits/sys_errlist.h', needed by '/home/bjorn/linux/tools/objtool/libsubcmd/exec-cmd.o'.  Stop.
> >   make[3]: *** [Makefile:80: /home/bjorn/linux/tools/objtool/libsubcmd/libsubcmd-in.o] Error 2
> >   make[2]: *** [Makefile:78: /home/bjorn/linux/tools/objtool/libsubcmd/libsubcmd.a] Error 2
> >   make[1]: *** [Makefile:73: objtool] Error 2
> >   make: *** [Makefile:1440: tools/objtool] Error 2
> >
> > I finally got the right target, but the build still fails:
> >
> >   06:04:39 ~/linux (hotplug)$ make drivers/pci/hotplug/
> >     CALL    scripts/checksyscalls.sh
> >     DESCEND objtool
> >   make[4]: *** No rule to make target '/usr/include/x86_64-linux-gnu/bits/sys_errlist.h', needed by '/home/bjorn/linux/tools/objtool/libsubcmd/exec-cmd.o'.  Stop.
> >   make[3]: *** [Makefile:80: /home/bjorn/linux/tools/objtool/libsubcmd/libsubcmd-in.o] Error 2
> >   make[2]: *** [Makefile:78: /home/bjorn/linux/tools/objtool/libsubcmd/libsubcmd.a] Error 2
> >   make[1]: *** [Makefile:73: objtool] Error 2
> >   make: *** [Makefile:1440: tools/objtool] Error 2
> >
> > After "make distclean", everything works as expected, so maybe this is
> > just the expected behavior after my initial user error?  I dunno; it
> > seemed surprising.  Just FYI.

I believe we've been hitting a similar issue at $JOB, which looks like
the following (this is on a 5.15-ish kernel, but AFAICT everything is
still relevant):

make[5]: *** No rule to make target '[...]/tools/include/linux/compiler.h', needed by '[...]/tools/bpf/resolve_btfids/libsubcmd/exec-cmd.o'.  Stop.
make[4]: *** [Makefile:59: [...]/tools/bpf/resolve_btfids/libsubcmd/libsubcmd-in.o] Error 2
make[3]: *** [Makefile:45: [...]/tools/bpf/resolve_btfids//libsubcmd/libsubcmd.a] Error 2
make[2]: *** [Makefile:72: bpf/resolve_btfids] Error 2
make[1]: *** [[...]/Makefile:1401: tools/bpf/resolve_btfids] Error 2

This particular case happens for us when the source tree is moving, but
we're sharing an O= cache. This may or may not be a good idea, but
AFAICT there still is a real bug underneath, which I explore below.

> I do not know what is happening on your build machine,
> but judging from the error log, something went wrong
> while building objtool.
> 
> objtool Makefile is not a part of Kbuild.
> The maintainers of objtool may have some insight.

I'm no maintainer, but I found that the .exec-cmd.o.cmd dep file is
generated incorrectly due to improper fixdep dependencies:

$ head -2 [...]/tools/bpf/resolve_btfids/libsubcmd/.exec-cmd.o.cmd
# cannot find fixdep ([...]/tools/bpf/resolve_btfids/libsubcmd//fixdep)
# using basic dep data

Now, this soft error is normally OK, as long as you don't have any
missing or moved headers. But if these moved around, then normally the
fixdep'd dependencies would help rebuild (and regenerate .cmd files with
new paths) silently.

The bad .cmd file is reliably reproduced by:

# for an easier-to-build target that also builds libsubcmd:
cd tools/objtool
# for maximum cleanliness:
git clean -xfd ..
make
head -2 libsubcmd/.exec-cmd.o.cmd

(NB: if you look hard enough, you'll notice that we have a similar
"cannot find fixdep" error for tools/.../.fixdep.o.cmd too. I have some
analysis at https://issuetracker.google.com/313508829#comment32 --
this one is publicly accessible -- but its solution would be more
complex. I may raise a separate thread.)

The following patch fixes libsubcmd stuff for me. I can resubmit in a
proper patch form if desired, or feel free to scrape it as-is.

Signed-off-by: Brian Norris <briannorris@xxxxxxxxxxxx>
---

diff --git a/tools/lib/subcmd/Makefile b/tools/lib/subcmd/Makefile
index b87213263a5e..59b09f280e49 100644
--- a/tools/lib/subcmd/Makefile
+++ b/tools/lib/subcmd/Makefile
@@ -76,7 +76,7 @@ include $(srctree)/tools/build/Makefile.include
 
 all: fixdep $(LIBFILE)
 
-$(SUBCMD_IN): FORCE
+$(SUBCMD_IN): fixdep FORCE
 	@$(MAKE) $(build)=libsubcmd
 
 $(LIBFILE): $(SUBCMD_IN)




[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux