Commit d9aa9b1a authored by Simon Marlow's avatar Simon Marlow
Browse files

FIX #2332: avoid overflow on 64-bit machines in the memory allocator

parent 02620e7c
......@@ -184,10 +184,10 @@ extern void freeStorage(void);
-------------------------------------------------------------------------- */
extern StgPtr allocate ( nat n );
extern StgPtr allocateInGen ( generation *g, nat n );
extern StgPtr allocateLocal ( Capability *cap, nat n );
extern StgPtr allocatePinned ( nat n );
extern StgPtr allocate ( lnat n );
extern StgPtr allocateInGen ( generation *g, lnat n );
extern StgPtr allocateLocal ( Capability *cap, lnat n );
extern StgPtr allocatePinned ( lnat n );
extern lnat allocatedBytes ( void );
extern bdescr * RTS_VAR(small_alloc_list);
......
......@@ -176,7 +176,7 @@ void *
osGetMBlocks(nat n)
{
caddr_t ret;
lnat size = MBLOCK_SIZE * n;
lnat size = MBLOCK_SIZE * (lnat)n;
if (next_request == 0) {
// use gen_map_mblocks the first time.
......
......@@ -585,7 +585,7 @@ move_TSO (StgTSO *src, StgTSO *dest)
-------------------------------------------------------------------------- */
StgPtr
allocateInGen (generation *g, nat n)
allocateInGen (generation *g, lnat n)
{
step *stp;
bdescr *bd;
......@@ -600,7 +600,7 @@ allocateInGen (generation *g, nat n)
if (n >= LARGE_OBJECT_THRESHOLD/sizeof(W_))
{
nat req_blocks = (lnat)BLOCK_ROUND_UP(n*sizeof(W_)) / BLOCK_SIZE;
lnat req_blocks = (lnat)BLOCK_ROUND_UP(n*sizeof(W_)) / BLOCK_SIZE;
// Attempting to allocate an object larger than maxHeapSize
// should definitely be disallowed. (bug #1791)
......@@ -642,7 +642,7 @@ allocateInGen (generation *g, nat n)
}
StgPtr
allocate (nat n)
allocate (lnat n)
{
return allocateInGen(g0,n);
}
......@@ -703,7 +703,7 @@ splitLargeBlock (bdescr *bd, nat blocks)
-------------------------------------------------------------------------- */
StgPtr
allocateLocal (Capability *cap, nat n)
allocateLocal (Capability *cap, lnat n)
{
bdescr *bd;
StgPtr p;
......@@ -780,7 +780,7 @@ allocateLocal (Capability *cap, nat n)
------------------------------------------------------------------------- */
StgPtr
allocatePinned( nat n )
allocatePinned( lnat n )
{
StgPtr p;
bdescr *bd = pinned_object_block;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment