RPI3 clang crashes in buildworld
Mark Millard
marklmi at yahoo.com
Mon Jan 21 00:33:05 UTC 2019
On 2019-Jan-20, at 15:47, bob prohaska <fbsd at www.zefox.net> wrote:
> On Sun, Jan 20, 2019 at 01:39:04PM -0800, Mark Millard wrote:
>> On 2019-Jan-20, at 08:32, bob prohaska <fbsd at www.zefox.net> wrote:
>>
>>
>>> Has anyone had recent success running buildworld on an RPI3? I'm seeing
>>> signal 11's with increasing regularity during the building libraries phase.
>>> Two months ago -j4 buildworld ran successfully.
>>>
>>> It's possible my system is corrupted. I've tinkered with a kernel patch at
>>> https://people.freebsd.org/~gonzo/arm/patches/vchiq-wip-20180217.diff
>>> back when the system was at r342781, but the patch was reversed and the
>>> machine is now up to r343165 using "clean start" buildworld without -j
>>> and careful restarts, deleting the last .o file before the crashes.
>>>
>>> There are no hardware errors on the console and only clang is crashing.
>>> The machine will even run the chromium browser without crashing, but it
>>> does grumble:
>>>
>>> bob at www:~ % chrome
>>> [83827:1218383872:0120/075747.927080:ERROR:gpu_process_transport_factory.cc(1016)] Lost UI shared context.
>>> [84111:1339003392:0120/075753.574384:ERROR:command_buffer_proxy_impl.cc(113)] ContextResult::kFatalFailure: Shared memory handle is not valid
>>>
>>> The most recent buildworld steps were
>>> svnlite up /usr/src
>>> make cleandir (twice)
>>> rm -rf /usr/obj/usr/
>>> make kernel-toolchain
>>> make buildkernel
>>> make installkernel
>>> (reboot)
>>> make buildworld (using -DNO_CLEAN for restarts)
>>>
>>> Have I taken all the steps possible for a clean rebuild?
>>>
>>> At the moment both buildworld and chromium are running, without
>>> any additional problems.
>>
>>
>> You may want to give more details, such as the content of . . .
>>
>> /etc/make.conf
>> /etc/src.conf
>> *.meta files for the failed commands (if any)
>>
>> Listing some example *.meta file information from a cross build
>> (not likely problem files):
>>
>> # cd /usr/obj/armv7_clang/arm.armv7/usr/src/arm.armv7/bin/sh
>> # ls -lTdrt *.meta
>> . . .
>> -rw-r--r-- 1 root wheel 4236 Dec 11 23:42:04 2018 nodes.o.meta
>> -rw-r--r-- 1 root wheel 3603 Dec 11 23:42:05 2018 sh.full.meta
>> -rw-r--r-- 1 root wheel 726 Dec 11 23:42:05 2018 sh.debug.meta
>> -rw-r--r-- 1 root wheel 739 Dec 11 23:42:05 2018 sh.meta
>>
>
> All are absent. /etc/src.conf and /etc/make.conf have been used in the
> past but subsequently renamed to inactivate them.
Good to know.
> Using
> find /usr/obj -name \*.meta -depth -print
> reports nothing, did I botch the wildcard escape?
> Note that this is arm64, not armv7, does that matter?
The build attempt itself creates the *.meta files when WITH_META_MODE=
is in use. But I forgot that WITH_META_MODE is not enabled by default.
WITH_META_MODE has to be supplies via an environment variable style of
definition if used:
QUOTE
The environment of make(1) for the build can be controlled via the
SRC_ENV_CONF variable, which defaults to /etc/src-env.conf. Some
examples that may only be set in this file are WITH_DIRDEPS_BUILD, and
WITH_META_MODE, and MAKEOBJDIRPREFIX as they are environment-only
variables.
END QUOTE
It can be supplied as a prefix on the make command line. For example I use
in a script file (/bin/sh notation):
env __MAKE_CONF="/root/src.configs/make.conf" SRCCONF="/dev/null" SRC_ENV_CONF="/root/src.configs/src.conf.armv7-clang-bootstrap.amd64-host" \
WITH_META_MODE=yes \
WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x42000000" \
MAKEOBJDIRPREFIX="/usr/obj/armv7_clang/arm.armv7" \
make $*
(Not that you need all of the env value specifications above or the
$* notation on a direct command on the command line.)
As to why you might want such a WITH_META_MODE build:
QUOTE
WITH_META_MODE
. . .
. . . These meta files track the
command that was executed, its output, and the current directory.
The filemon(4) module is required unless NO_FILEMON is defined.
. . .
The meta files can also be useful for debugging.
The build hides commands that are executed unless NO_SILENT is
defined. Errors cause make(1) to show some of its environment
for further debugging.
. . .
This must be set in the environment, make command line, or
/etc/src-env.conf, not /etc/src.conf.
END QUOTE
The quotes are from "man src.conf". WITH_META_MODE is designed to give
incremental builds once the initial META_MODE build has been established.
> The system seems to do most of its crashing when making .pico files.
> It's been building libraries for a couple of hours, if past
> experience is any guide it'll finish in a couple of days.
Getting the the records in *.meta files would require starting a new
from-scratch build using WITH_META_MODE.
I warn that WITH_META_MODE=no would also enable the mode: the issue is
if WITH_META_MODE is defined vs. not, instead of being the specific value
assigned.
One thing that can help with avoiding excessive memory use is:
LDFLAGS.lld+= -Wl,--no-threads
in order to avoid ncpu+2 threads going in parallel during a specific
link, so 4+2 in your context for one link. If more than one link
runs at once it ends up being nlinksatonce*(4+2) threads at the
same time. So for -j4 it could end up with 4*6==24 threads at once
(and I've seen such things).
===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)
More information about the freebsd-arm
mailing list