rtsBool frontpanel;
int idleGCDelayTime; /* in milliseconds */
+
+ StgWord heapBase; /* address to ask the OS for memory */
};
struct DEBUG_FLAGS {
#endif
RtsFlags.GcFlags.idleGCDelayTime = 300; /* millisecs */
+#if osf3_HOST_OS
+/* ToDo: Perhaps by adjusting this value we can make linking without
+ * -static work (i.e., not generate a core-dumping executable)? */
+# if SIZEOF_VOID_P == 8
+ RtsFlags.GcFlags.heapBase = 0x180000000L;
+# else
+# error I have no idea where to begin the heap on a non-64-bit osf3 machine.
+# endif
+#else
+ RtsFlags.GcFlags.heapBase = 0; /* means don't care */
+#endif
+
#ifdef DEBUG
RtsFlags.DebugFlags.scheduler = rtsFalse;
RtsFlags.DebugFlags.interpreter = rtsFalse;
error = rtsTrue;
break;
+ case 'b': /* heapBase in hex; undocumented */
+ if (rts_argv[arg][3] != '\0') {
+ RtsFlags.GcFlags.heapBase
+ = strtol(rts_argv[arg]+3, (char **) NULL, 16);
+ } else {
+ errorBelch("-xb: requires argument");
+ error = rtsTrue;
+ }
+ break;
+
case 'c': /* Debugging tool: show current cost centre on an exception */
PROFILING_BUILD_ONLY(
RtsFlags.ProfFlags.showCCSOnException = rtsTrue;
lnat mblocks_allocated = 0;
+#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS)
+static caddr_t next_request = 0;
+#endif
+
+void
+initMBlocks(void)
+{
+#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS)
+ next_request = (caddr_t)RtsFlags.GcFlags.heapBase;
+#endif
+}
+
/* -----------------------------------------------------------------------------
The MBlock Map: provides our implementation of HEAP_ALLOCED()
-------------------------------------------------------------------------- */
void *
getMBlocks(nat n)
{
- static caddr_t next_request = (caddr_t)HEAP_BASE;
caddr_t ret;
lnat size = MBLOCK_SIZE * n;
nat i;
extern lnat RTS_VAR(mblocks_allocated);
+extern void initMBlocks(void);
extern void * getMBlock(void);
extern void * getMBlocks(nat n);
extern void freeAllMBlocks(void);
-#if osf3_HOST_OS
-/* ToDo: Perhaps by adjusting this value we can make linking without
- * -static work (i.e., not generate a core-dumping executable)? */
-#if SIZEOF_VOID_P == 8
-#define HEAP_BASE 0x180000000L
-#else
-#error I have no idea where to begin the heap on a non-64-bit osf3 machine.
-#endif
-
-#else
-
-// we're using the generic method
-#define HEAP_BASE 0
-
-#endif
-
/* -----------------------------------------------------------------------------
The HEAP_ALLOCED() test.
return;
}
+ initMBlocks();
+
/* Sanity check to make sure the LOOKS_LIKE_ macros appear to be
* doing something reasonable.
*/