Re: llvm10 build failure on Rpi3

From: bob prohaska <fbsd_at_www.zefox.net>
Date: Sat, 03 Jul 2021 21:54:45 UTC
On Sat, Jul 03, 2021 at 01:15:19PM -0700, Mark Millard wrote:
> 
> 
> 
> So you still have not tried an artifacts or snapshot kernel+world?
> 
Not yet. 

> > Eventually I resorted to running make in devel/llvm10, to my surprise it
> > ran to completion.
> 
> Interesting.
> 
> Was this -j4? -j1? -j2? Any other interesting characteristics
> for how it was run?
>
Nothing special was done. IIRC, it was make -DBATCH > make.log in
the background. From top's screen it looked like -j4. 
 
> It would be interesting to see if building in a chroot
> in that make style also worked (or a non-poudriere jail).
> 

Can you point me to instructions for doing the experiment?

> > It also ran make package successfully. Again I tried to
> > build just devel/llvm10 using poudriere, again getting "expected expression". 
> > 
> > At that point I resized the swap partitions to 1 GB each and tried poudriere
> > on devel/llvm10. That got rid of the excessive swap warnings, but didn't help.
> > Finally I placed 
> > MAKE_JOBS_NUMBER=2 
> > in /usr/local/etc/poudriere.d/make.conf and tried again. That still failed,
> > still with "expected expression". 
> 
> I'll note that the running build build shows Load Averages
> of under 3. So the MAKE_JOBS_NUMBER=2 seems to be working.
> 
> > Since devel/llvm10 had created a package successfully, I tried slipping a copy
> > into poudriere's package directory, hoping it would find and use the package
> > to make further progress. Unfortunately, poudriere seems to remember the failure
> > and won't use the proffered package. 
>
[large snip which convinced me to give up on tricking poudriere into
using a package constructed by make] 
> 
> Going in a different direction, one way to force a build to
> start over after a failure is to: rm -fr PATH/.building
> before starting a new bulk build. This might be appropriate
I'm missing something here: what does PATH represent? There's
nothing called .building under /usr/local/poudriere, at least
after the run finishes. 

> if one suspects a problem of a kind that did not stop a
> build but produced something for a build that fails to operate
> correctly.
> 
Such as a corrupt llmv-tblgen?
 
> So lang/rust finished. That is interesting because it includes an
> llvm build internally.
>

Does that build invoke the same llvm-tblgen?
[snip] 
> Again, poudriere does not control memory initialization in
> the processes in the builders.
>

For some reason I got the idea that whatever  asked for memory to use
was responsible for initializing it. Certainly not the kernel.....
 
> > The fact that the stoppage reported looks like
> > a syntax error specific to devel/llmv10 which is unaffected by swap pressure
> > makes it seem unrelated to kernel or swap constraints. 
> 
> The files with the syntax errors are ones generated by llvm-tblgen
> during the build and it is the output of llvm-tblgen that is corrupt,
> showing evidence of having used memory not initialized like it should
> have been.
>
 
Wouldn't that point suspicion at llvm-tblgen, of whatever version
LLVM is actually doing the work? 

> > AIUI, the hardware of the Pi4 is considerably different from the Pi3 in terms
> > of memory management, noted from an interview with Eben Upton on YouTube.
> 
> Why would Eben Upton be talking about FreeBSD's memory management?
> 
He was talking about the Pi4 hardware and how it differed from the Pi3

> I suspect that the talk is not about what you think it is about,
> but some narrower aspects than the overall memory managment.
>
 
I thought it had something to do with added DMA capablity. The video is at
https://www.youtube.com/watch?v=hyj-7mTnumI
In light of the discussion about llvm-tblgen I'm doubtful it's relevant,
but it's not the worst way to waste an hour.

> 
> > Is there any sort of sanity test for the poudriere system? If I delete and
> > re-create the existing jail can the existing package library be preserved
> > and re-used? If not, that's OK, I'd just like to know beforehand.
> > 
> 
> # poudriere jail -jNAME -d
> # poudriere jail -c -jNAME -m null -M /WORLDPATH -S /SRCPATH -v 14.0-CURRENT
>
> should work fine. But really all that you are
> doing is (using an example from my environment)
> is deleting and rewriting a few very small files
> in a directory with the jail's name:
>
So, in my case /usr/local/poudriere/poudriere-system? 
(using the nomenclature in your sample instructions).
That would leave /usr/local/poudriere/data intact....
I'm starting to understand why you think it unlikely
to help.

> The deletion/replacement of timestamp may have rebuild
> consequences from appearing to have changed (or just
> being missing).
> 
If timestamps guide decisions on what to make and when,
that might be significant. Not sure how I might've screwed
them up, but in my hands anything is possible 8-)

> Nothing about any of those is going to change how memory
> initialization is working in llvm-tblgen's operation
> for generating any *GenGlobalISel.inc files, other than
> if the timestamp forces some sort of rebuild from scratch
> of some build dependencies first.
> 
Maybe this should be obvious, but which llvm-tblgen is in 
action? the one from the system, (12.0.1) or something
else?

Thanks for writing!

bob prohaska