X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FRtsFlags.c;h=5eb7800540ca7785a16b26ab9a730b36d7758ff3;hp=0bd1b04313c163f43e3b3f22a15fd6d411bb7b25;hb=d4942f78fc3cce355d340b7bba0b42e4123103fa;hpb=cec00a4113d5b3079308b11f5e257c25908f9b37 diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c index 0bd1b04..5eb7800 100644 --- a/rts/RtsFlags.c +++ b/rts/RtsFlags.c @@ -340,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.", @@ -577,12 +579,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] );