X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FRtsFlags.c;h=c11cc3e925607ab5259815eccd02af148323e601;hb=08040f3e223222f26c13a8455e2d74bd623fda48;hp=b99995b16d2abb93f5e2925193b3bf9f4f68f040;hpb=cd6bd66faa4cb5ac5ae907bf7e1deab0dda4c5c4;p=ghc-hetmet.git diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c index b99995b..c11cc3e 100644 --- a/rts/RtsFlags.c +++ b/rts/RtsFlags.c @@ -10,6 +10,7 @@ #include "PosixSource.h" #include "Rts.h" +#include "RtsOpts.h" #include "RtsUtils.h" #include "Profiling.h" @@ -323,9 +324,6 @@ usage_text[] = { " --install-signal-handlers=", " Install signal handlers (default: yes)", #if defined(THREADED_RTS) -" -e Size of spark pools (default 100)", -#endif -#if defined(THREADED_RTS) " -e Maximum number of outstanding local sparks (default: 4096)", #endif #if defined(x86_64_HOST_ARCH) @@ -342,6 +340,8 @@ usage_text[] = { " b - branch mispredictions", " s - stalled cycles", " e - cache miss and branch misprediction events", +" +PAPI_EVENT - collect papi preset event PAPI_EVENT", +" #NATIVE_EVENT - collect native event NATIVE_EVENT (in hex)", #endif "", "RTS options may also be specified using the GHCRTS environment variable.", @@ -413,7 +413,13 @@ setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]) char *ghc_rts = getenv("GHCRTS"); if (ghc_rts != NULL) { - splitRtsFlags(ghc_rts, rts_argc, rts_argv); + if (rtsOptsEnabled != rtsOptsNone) { + splitRtsFlags(ghc_rts, rts_argc, rts_argv); + } + else { + errorBelch("Warning: Ignoring GHCRTS variable as RTS options are disabled.\n Link with -rtsopts to enable them."); + // We don't actually exit, just warn + } } } @@ -432,13 +438,26 @@ setupRtsFlags(int *argc, char *argv[], int *rts_argc, char *rts_argv[]) break; } else if (strequal("+RTS", argv[arg])) { - mode = RTS; + if (rtsOptsEnabled != rtsOptsNone) { + mode = RTS; + } + else { + errorBelch("RTS options are disabled. Link with -rtsopts to enable them."); + stg_exit(EXIT_FAILURE); + } } else if (strequal("-RTS", argv[arg])) { mode = PGM; } else if (mode == RTS && *rts_argc < MAX_RTS_ARGS-1) { - rts_argv[(*rts_argc)++] = argv[arg]; + if ((rtsOptsEnabled == rtsOptsAll) || + strequal(argv[arg], "--info")) { + rts_argv[(*rts_argc)++] = argv[arg]; + } + else { + errorBelch("Most RTS options are disabled. Link with -rtsopts to enable them."); + stg_exit(EXIT_FAILURE); + } } else if (mode == PGM) { argv[(*argc)++] = argv[arg]; @@ -535,7 +554,7 @@ error = rtsTrue; else if (strequal("info", &rts_argv[arg][2])) { printRtsInfo(); - exit(0); + stg_exit(0); } else { errorBelch("unknown RTS option: %s",rts_argv[arg]); @@ -567,12 +586,18 @@ error = rtsTrue; RtsFlags.PapiFlags.eventType = PAPI_FLAG_CB_EVENTS; break; case '+': + case '#': if (RtsFlags.PapiFlags.numUserEvents >= MAX_PAPI_USER_EVENTS) { errorBelch("maximum number of PAPI events reached"); stg_exit(EXIT_FAILURE); } + nat eventNum = RtsFlags.PapiFlags.numUserEvents++; + char kind = rts_argv[arg][2]; + nat eventKind = kind == '+' ? PAPI_PRESET_EVENT_KIND : PAPI_NATIVE_EVENT_KIND; + + RtsFlags.PapiFlags.userEvents[eventNum] = rts_argv[arg] + 3; RtsFlags.PapiFlags.eventType = PAPI_USER_EVENTS; - RtsFlags.PapiFlags.userEvents[RtsFlags.PapiFlags.numUserEvents++] = rts_argv[arg] + 3; + RtsFlags.PapiFlags.userEventsKind[eventNum] = eventKind; break; default: bad_option( rts_argv[arg] );