I've stopped the crashes that appear related to this on my box with the attached patch. config/gen/platform/darwin/memalign.c has a few unsigned variables that were being implicitly handled as (32-bit) ints, those variables are actually used as (or in the calculation of) memory addresses. Needless to say, the lopped off bytes became an issue when parrot tried to deallocate memory in a chunk of address space that was never allocated in the first place.
The patch doesn't appear to have caused any issues with Intel 10.5 OS X builds (both 32 and 64 bit), but it hasn't been heavily tested yet.
Index: config/gen/platform/darwin/memalign.c =================================================================== --- config/gen/platform/darwin/memalign.c (revision 30077) +++ config/gen/platform/darwin/memalign.c (working copy) @@ -26,7 +26,7 @@ /* -=item C<static unsigned log2int(unsigned x)> +=item C<static unsigned long log2int(unsigned long x)> RT#48260: Not yet documented!!! @@ -34,13 +34,13 @@ */ -static unsigned log2int(unsigned x) { +static unsigned long log2int(unsigned long x) { return (x<2) ? 0 : log2int(x>>1)+1; } /* -=item C<static unsigned roundDownPowerOf2(unsigned x)> +=item C<static unsigned long roundDownPowerOf2(unsigned long x)> RT#48260: Not yet documented!!! @@ -48,13 +48,13 @@ */ -static unsigned roundDownPowerOf2(unsigned x) { +static unsigned long roundDownPowerOf2(unsigned long x) { return (1 << log2int(x)); } /* -=item C<static unsigned roundUpPowerOf2(unsigned x)> +=item C<static unsigned long roundUpPowerOf2(unsigned long x)> RT#48260: Not yet documented!!! @@ -62,27 +62,27 @@ */ -static unsigned roundUpPowerOf2(unsigned x) +static unsigned long roundUpPowerOf2(unsigned long x) { - static unsigned one = 1; - unsigned log2Int = log2int(x); + static unsigned long one = 1; + unsigned long log2Int = log2int(x); return ((one << log2Int) == x) ? x : (one << (log2Int + 1)); } /* -=item C<static unsigned roundUpToPageBoundary(unsigned x)> +=item C<static unsigned long roundUpToPageBoundary(unsigned long x)> -RT#48260: Not yet documented!!! +Returns the address of the page that contains the address x. =cut */ -static unsigned roundUpToPageBoundary(unsigned x) +static unsigned long roundUpToPageBoundary(unsigned long x) { - unsigned roundedDown = trunc_page(x); + unsigned long roundedDown = trunc_page(x); return (roundedDown == x) ? x : (roundedDown + vm_page_size); }