- case 'z': /* size of index tables */
- PROFILING_BUILD_ONLY(
- switch (rts_argv[arg][2]) {
- case CCchar:
- max_cc_no = (hash_t) decode(rts_argv[arg]+3);
- if (max_cc_no == 0) {
- prog_belch("bad number of cost centres %s", rts_argv[arg]);
- error = rtsTrue;
- }
- break;
- case MODchar:
- max_mod_no = (hash_t) decode(rts_argv[arg]+3);
- if (max_mod_no == 0) {
- prog_belch("bad number of modules %s", rts_argv[arg]);
- error = rtsTrue;
- }
- break;
- case DESCRchar:
- max_descr_no = (hash_t) decode(rts_argv[arg]+3);
- if (max_descr_no == 0) {
- prog_belch("bad number of closure descriptions %s",
- rts_argv[arg]);
- error = rtsTrue;
- }
- break;
- case TYPEchar:
- max_type_no = (hash_t) decode(rts_argv[arg]+3);
- if (max_type_no == 0) {
- prog_belch("bad number of type descriptions %s",
- rts_argv[arg]);
- error = rtsTrue;
- }
- break;
- default:
- prog_belch("invalid index table size option: %s",
- rts_argv[arg]);
- error = rtsTrue;
- }
- ) break;
-
- case 'c': /* cost centre label select */
- case 'd': /* closure descr select */
- case 'y': /* closure type select */
- PROFILING_BUILD_ONLY(
- {char *left = strchr(rts_argv[arg], '{');
- char *right = strrchr(rts_argv[arg], '}');
-
- if (! left || ! right ||
- strrchr(rts_argv[arg], '{') != left ||
- strchr(rts_argv[arg], '}') != right) {
- prog_belch("invalid heap profiling selection bracketing: %s",
- rts_argv[arg]);
- error = rtsTrue;
- } else {
- *right = '\0';
- switch (rts_argv[arg][1]) {
- case 'c': /* cost centre label select */
- RtsFlags.ProfFlags.ccSelector = left + 1;
- break;
- case 'm': /* cost centre module select */
- RtsFlags.ProfFlags.modSelector = left + 1;
- break;
- case 'd': /* closure descr select */
- RtsFlags.ProfFlags.descrSelector = left + 1;
- break;
- case 'y': /* closure type select */
- RtsFlags.ProfFlags.typeSelector = left + 1;
- break;
- case 'k': /* closure kind select */
- RtsFlags.ProfFlags.kindSelector = left + 1;
- break;
- }
- }}
- ) break;
-