X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FMBlock.h;h=64fd459b912970050aa57919b9e7b2e0035d949a;hb=423d477bfecd490de1449c59325c8776f91d7aac;hp=c369416ff4a733c1a8bc4f3e0dec52aa1a51689f;hpb=338be3e67180ff09030e665cb98f748317f46ce6;p=ghc-hetmet.git diff --git a/ghc/rts/MBlock.h b/ghc/rts/MBlock.h index c369416..64fd459 100644 --- a/ghc/rts/MBlock.h +++ b/ghc/rts/MBlock.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: MBlock.h,v 1.16 2002/11/22 06:54:05 matthewc Exp $ + * $Id: MBlock.h,v 1.20 2004/08/13 13:10:10 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -9,7 +9,8 @@ #ifndef __MBLOCK_H__ #define __MBLOCK_H__ -extern lnat mblocks_allocated; + +extern lnat RTS_VAR(mblocks_allocated); extern void * getMBlock(void); extern void * getMBlocks(nat n); @@ -70,10 +71,16 @@ extern StgWord8 mblock_map[]; # define MARK_HEAP_ALLOCED(p) ((MBLOCK_MAP_ENTRY(p) < MBLOCK_MAP_SIZE) \ && (mblock_map[MBLOCK_MAP_ENTRY(p)] = 1)) -#elif defined(TEXT_BEFORE_HEAP) -/* Fall back to old method - assume heap above HEAP_BASE */ -# define HEAP_ALLOCED(p) ((StgPtr)(p) >= (StgPtr)(HEAP_BASE)) -# define MARK_HEAP_ALLOCED(p) do {} while(0) +#elif SIZEOF_VOID_P == 8 +/* XXX: This is a HACK, and will not work in general! We just use the + * lower 32 bits of the address, and do the same as for the 32-bit + * version. As long as the OS gives us memory in a roughly linear + * fashion, it won't go wrong until we've allocated 4G. */ +# define MBLOCK_MAP_SIZE 4096 +# define MBLOCK_MAP_ENTRY(p) (((StgWord)(p) & 0xffffffff) >> MBLOCK_SHIFT) +# define HEAP_ALLOCED(p) (mblock_map[MBLOCK_MAP_ENTRY(p)]) +# define MARK_HEAP_ALLOCED(p) (mblock_map[MBLOCK_MAP_ENTRY(p)] = 1) + #else # error HEAP_ALLOCED not defined