1.0.37.4: robuster page table pickup
The Problem:
It is rare, but apparently possible, for there to be free pages in
the middle of allocated pages even after the double-collection we
do in gc_and_save().
Previously this was not an issue, since the static space pickup
mechanism just ended up marking those pages as boxed and full --
so we could get a page or few of (0 . 0) in the static generation.
No biggie.
Now, however, we save page table information into the core (for
normal, not cold cores). This means that a would get a page marked
as free, but since it was below alloc_ptr gencgc_pickup_dynamic()
would mark it having bytes_used=PAGE_BYTES, etc.
...and later, find_freeish_pages() would look at the page and
cry out in existential anguish becaue it should be free but
didn't have bytes_used==0. Oh Noes!
The Fix:
gencgc_pickup_dynamic() needs to be careful about pages marked free
if partial pickup has already been done from the core.