/* -----------------------------------------------------------------------------
- * $Id: RtsFlags.c,v 1.61 2002/10/05 22:18:45 panne Exp $
+ * $Id: RtsFlags.c,v 1.68 2003/04/21 14:45:28 sof Exp $
*
* (c) The AQUA Project, Glasgow University, 1994-1997
* (c) The GHC Team, 1998-1999
#include "RtsFlags.h"
#include "RtsUtils.h"
#include "BlockAlloc.h"
-#include "Itimer.h" /* CS_MIN_MILLISECS */
+#include "Timer.h" /* CS_MIN_MILLISECS */
#include "Profiling.h"
-#if defined(PROFILING)
-#include "Itimer.h"
-#endif
-
#ifdef HAVE_CTYPE_H
#include <ctype.h>
#endif
/*
* Split argument lists
*/
-int prog_argc; /* an "int" so as to match normal "argc" */
+int prog_argc = 0; /* an "int" so as to match normal "argc" */
char **prog_argv = NULL;
-int rts_argc; /* ditto */
+int rts_argc = 0; /* ditto */
char *rts_argv[MAX_RTS_ARGS];
//@node Constants, Static function decls, Includes
#define RTS 1
#define PGM 0
-char *debug_opts_prefix[] = {
- "_-", /* scheduler */
- "_.", /* evaluator */
- "_,", /* codegen */
- "_;", /* weak */
- "_~", /* gccafs */
- "_@", /* gc */
- "_#", /* block */
- "_&", /* sanity */
- "_:", /* stable */
- "_!", /* prof */
- "_=", /* gran */
- "_=" /* par */
- "_*" /* linker */
-};
-
#if defined(GRAN)
-char *gran_debug_opts_strs[] = {
+static char *gran_debug_opts_strs[] = {
"DEBUG (-bDe, -bD1): event_trace; printing event trace.\n",
"DEBUG (-bDE, -bD2): event_stats; printing event statistics.\n",
"DEBUG (-bDb, -bD4): bq; check blocking queues\n",
};
/* one character codes for the available debug options */
-char gran_debug_opts_flags[] = {
+static char gran_debug_opts_flags[] = {
'e', 'E', 'b', 'G', 'q', 'f', 'r', 'F', 'u', 'S', ':', 'o', 'z', 'P', 't'
};
-/* prefix strings printed with the debug messages of the corresponding type */
-char *gran_debug_opts_prefix[] = {
- "", /* event_trace */
- "", /* event_stats */
- "##", /* bq */
- "**", /* pack */
- "^^", /* checkSparkQ */
- "==", /* thunkStealing */
- "^^", /* randomSteal */
- "+-", /* findWork */
- "", /* unused */
- "++", /* pri */
- "::", /* checkLight */
- "##", /* sortedQ */
- "", /* blockOnFetch */
- "", /* packBuffer */
- "" /* blockOnFetch_sanity */
-};
-
#elif defined(PAR)
-char *par_debug_opts_strs[] = {
+static char *par_debug_opts_strs[] = {
"DEBUG (-qDv, -qD1): verbose; be generally verbose with parallel related stuff.\n",
"DEBUG (-qDq, -qD2): bq; print blocking queues.\n",
"DEBUG (-qDs, -qD4): schedule; scheduling of parallel threads.\n",
};
/* one character codes for the available debug options */
-char par_debug_opts_flags[] = {
+static char par_debug_opts_flags[] = {
'v', 'q', 's', 'e', 'r', 'w', 'F', 'f', 'l', 'o', 'p', 'z'
};
-/* prefix strings printed with the debug messages of the corresponding type */
-char *par_debug_opts_prefix[] = {
- " ", /* verbose */
- "##", /* bq */
- "--", /* schedule */
- "!!", /* free */
- "[]", /* resume */
- ";;", /* weight */
- "%%", /* fetch */
- //",,", /* ack */
- "$$", /* fish */
- "", /* tables */
- "**", /* packet */
- "**" /* pack */
- ":(" /* paranoia */
-};
-
#endif /* PAR */
//@node Static function decls, Command-line option parsing routines, Constants
#ifdef DEBUG
RtsFlags.DebugFlags.scheduler = rtsFalse;
- RtsFlags.DebugFlags.evaluator = rtsFalse;
+ RtsFlags.DebugFlags.interpreter = rtsFalse;
RtsFlags.DebugFlags.codegen = rtsFalse;
RtsFlags.DebugFlags.weak = rtsFalse;
RtsFlags.DebugFlags.gccafs = rtsFalse;
#ifdef PROFILING
RtsFlags.ProfFlags.doHeapProfile = rtsFalse;
RtsFlags.ProfFlags.profileInterval = 100;
+ RtsFlags.ProfFlags.includeTSOs = rtsFalse;
RtsFlags.ProfFlags.showCCSOnException = rtsFalse;
RtsFlags.ProfFlags.maxRetainerSetSize = 8;
RtsFlags.ProfFlags.modSelector = NULL;
"",
" -i<sec> Time between heap samples (seconds, default: 0.1)",
"",
+" -xt Include threads (TSOs) in a heap profile",
+"",
" -xc Show current cost centre stack on raising an exception",
# endif
#endif /* PROFILING or PAR */
"",
#if defined(DEBUG)
" -Ds DEBUG: scheduler",
-" -De DEBUG: evaluator",
+" -Di DEBUG: interpreter",
" -Dc DEBUG: codegen",
" -Dw DEBUG: weak",
" -DG DEBUG: gccafs",
if (c1 == c2) { break; }
if (*rts_argc < MAX_RTS_ARGS-1) {
- s = malloc(c2-c1+1);
+ s = stgMallocBytes(c2-c1+1, "RtsFlags.c:splitRtsFlags()");
strncpy(s, c1, c2-c1);
s[c2-c1] = '\0';
rts_argv[(*rts_argc)++] = s;
}
}
- // process arguments from the GHCRTS environment variable first
+ // process arguments from the GHCRTS environment variable next
// (arguments from the command line override these).
{
char *ghc_rts = getenv("GHCRTS");
case 's':
RtsFlags.DebugFlags.scheduler = rtsTrue;
break;
- case 'e':
- RtsFlags.DebugFlags.evaluator = rtsTrue;
+ case 'i':
+ RtsFlags.DebugFlags.interpreter = rtsTrue;
break;
case 'c':
RtsFlags.DebugFlags.codegen = rtsTrue;
case 'l':
RtsFlags.DebugFlags.linker = rtsTrue;
break;
+ case 'a':
+ RtsFlags.DebugFlags.apply = rtsTrue;
+ break;
default:
bad_option( rts_argv[arg] );
}
case 'c': /* Debugging tool: show current cost centre on an exception */
PROFILING_BUILD_ONLY(
- RtsFlags.ProfFlags.showCCSOnException = rtsTrue;
- ) break;
+ RtsFlags.ProfFlags.showCCSOnException = rtsTrue;
+ );
+ break;
+
+ case 't': /* Include memory used by TSOs in a heap profile */
+ PROFILING_BUILD_ONLY(
+ RtsFlags.ProfFlags.includeTSOs = rtsTrue;
+ );
+ break;
/* The option prefix '-xx' is reserved for future extension. KSW 1999-11. */