2015-04-15

I had the MIPS32 support almost working early
this year. But as I was doing some final testing, I noticed
intermittent errors under some conditions: segfaults and
other “shoudn't happen” errors. The pachuco
bootstrapping process is intended to be deterministic:
whether it completes without errors, and the resulting
compiler binary if it does so, should only depend on the
inputs to that process. But what are the inputs? The
source files are the most obvious and significant part. But
some other things can potentially have an impact. The
HEAP_SIZE environment variable sets the size of the
garbage-collected heap for the pachuco runtime. When things
are working properly, this should not make a difference to
program behaviour. But I found that for some values of
HEAP_SIZE, the bootstrap would complete
successfully, but other values would consistently result in
crashes. As HEAP_SIZE affects at which points the
GC runs, that suggests GC bugs.

The x86 and ARM targets didn't exhibit similar bugs,
meaning that the problem was not in the GC itself, but
rather in the generated MIPS32 code that calls into the GC.
But after spending a while eyeballing the relevant code, I
couldn't find it. Another approach to finding the cause
would have been to debug a crash with gdb, but in the past
I've found this approach to be a very slow process: problems
in the GC can cause the program to go off the rails long
after the GC was active.

So I decided to take a detour, and do some work to make
it possible to track down GC issues more systematically. In
the process of doing that, I found and fixed some
latent bugs which affected the x86 and ARM, but those
issues weren't responsible for the MIPS crashes. Once I had
that working on the established platforms, I returned to the
MIPS32 port, and spotted the bug almost immediately. It
turned out to be one of those trivial but severe bugs that
makes you wonder “how did this ever work?”
— which is why it was easy to overlook.

So now pachuco has working MIPS32 support. I haven't yet
updated the pachuco web site to talk about it though. That
site hasn't received any attention in a long long time, so
it needs a general overhaul.