[MLton] Crash with 4GB ram
Alain Deutsch
deutsch@PolySpace.com
Wed, 17 Dec 2003 14:44:08 +0100
We have a crash of an mlton-20030716 generated executable when run on a
Sun with 4Gb RAM.
One of our engineers suspects it is due to an overflow in the following
code.
static void setMemInfo (GC_state s) {
struct anoninfo anon;
s->totalRam = sysconf (_SC_PHYS_PAGES) * s->pageSize;
if (-1 == swapctl (SC_AINFO, &anon))
/* Couldn't get swap, so assume that there's as much swap as
* there is RAM.
*/
s->totalSwap = s->totalRam;
else
s->totalSwap = anon.ani_max * s->pageSize;
}
If totalRAM is equal to 4Gb, the above multiplication result will indeed
wrap around to zero.
I suspect the same problem can occur with totalSwap, and in various
places in the code where totalRam+totalSwap is computed without
promotion to 64bits.
Would it be worthwhile to change the type of totalRam and totalSwap to
unsigned long long, as well as to promote various computations in gc.c
to 64 bits ?
Thanks.
--
Alain Deutsch, CTO tel.: +33 (0)1 49 65 32 64
PolySpace Technologies fax.: +33 (0)1 49 65 05 77
mailto:deutsch@POLYSPACE.COM http://www.polyspace.com