X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FRtsFlags.c;h=37c22d1db01d58958c2669b08d0e64ffe9701842;hb=04b5d01b1069bbb60feb9873209355668a20545d;hp=d79136bf99c56e32e1779dbf4727843b5c046f0b;hpb=95ca6bff6fc9918203173b442192d9298ef9757a;p=ghc-hetmet.git diff --git a/ghc/rts/RtsFlags.c b/ghc/rts/RtsFlags.c index d79136b..37c22d1 100644 --- a/ghc/rts/RtsFlags.c +++ b/ghc/rts/RtsFlags.c @@ -1,5 +1,5 @@ + /* ----------------------------------------------------------------------------- - * $Id: RtsFlags.c,v 1.76 2004/09/03 15:28:40 simonmar Exp $ * * (c) The AQUA Project, Glasgow University, 1994-1997 * (c) The GHC Team, 1998-1999 @@ -184,6 +184,7 @@ void initRtsFlagsDefaults(void) RtsFlags.DebugFlags.block_alloc = rtsFalse; RtsFlags.DebugFlags.sanity = rtsFalse; RtsFlags.DebugFlags.stable = rtsFalse; + RtsFlags.DebugFlags.stm = rtsFalse; RtsFlags.DebugFlags.prof = rtsFalse; RtsFlags.DebugFlags.gran = rtsFalse; RtsFlags.DebugFlags.par = rtsFalse; @@ -425,6 +426,7 @@ usage_text[] = { " -Dr DEBUG: gran", " -DP DEBUG: par", " -Dl DEBUG: linker", +" -Dm DEBUG: stm", "", #endif // DEBUG #if defined(SMP) @@ -497,21 +499,8 @@ setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]) rtsBool error = rtsFalse; I_ mode; I_ arg, total_arg; - char *last_slash; - - /* Remove directory from argv[0] -- default files in current directory */ - if ((last_slash = (char *) strrchr(argv[0], -#if !defined(mingw32_TARGET_OS) - '/') -#else - '\\') -#endif - ) != NULL) { - prog_name = last_slash+1; - } else { - prog_name = argv[0]; - } + setProgName (argv); total_arg = *argc; arg = 1; @@ -730,6 +719,9 @@ error = rtsTrue; case 'a': RtsFlags.DebugFlags.apply = rtsTrue; break; + case 'm': + RtsFlags.DebugFlags.stm = rtsTrue; + break; default: bad_option( rts_argv[arg] ); } @@ -2186,3 +2178,48 @@ bad_option(const char *s) errorBelch("bad RTS option: %s", s); stg_exit(EXIT_FAILURE); } + +/* ----------------------------------------------------------------------------- + Getting/Setting the program's arguments. + + These are used by System.Environment, and parts of the RTS. + -------------------------------------------------------------------------- */ + +void +setProgName(char *argv[]) +{ + char *last_slash; + + /* Remove directory from argv[0] -- default files in current directory */ + if ((last_slash = (char *) strrchr(argv[0], +#if !defined(mingw32_HOST_OS) + '/' +#else + '\\' +#endif + )) != NULL) { + prog_name = last_slash+1; + } else { + prog_name = argv[0]; + } +} + +void +getProgArgv(int *argc, char **argv[]) +{ + if (argc) { *argc = prog_argc; } + if (argv) { *argv = prog_argv; } +} + +void +setProgArgv(int argc, char *argv[]) +{ + /* Usually this is done by startupHaskell, so we don't need to call this. + However, sometimes Hugs wants to change the arguments which Haskell + getArgs >>= ... will be fed. So you can do that by calling here + _after_ calling startupHaskell. + */ + prog_argc = argc; + prog_argv = argv; + setProgName(prog_argv); +}