-static void
-breakPointCommand(HpcRixOp rixOp, StgThreadID rixTid) {
- StgWord64 tmp64 = 0;
- unsigned int tmp = 0;
- printEvent(rixFile,rixCounter,rixTid,rixOp);
- fflush(rixFile);
- /* From here, you can ask some basic questions.
- *
- * c<nat> set the (one) counter breakpoint
- * s<nat> set the (many) tickbox breakpoint
- * u<nat> unset the (many) tickbox breakpoint
- * x set special bp
- * o unset special bp
- * h history
-
- * Note that you aways end up here on the first tick
- * because the specialOpBP is equal 0.
- */
- int c = getc(rixCmdFile);
- while(c != 10 && c != -1) {
- switch(c) {
- case 'c': // c1234 -- set counter breakpoint at 1234
- c = getc(rixCmdFile);
- tmp64 = 0;
- while(isdigit(c)) {
- tmp64 = tmp64 * 10 + (c - '0');
- c = getc(rixCmdFile);
- }
-#if DEBUG_HPC
- fprintf(stderr,"setting countBP = %" PRIuWORD64 "\n",tmp64);
-#endif
- rixBPCounter = tmp64;
- break;
- case 's': // s2323 -- set tick box breakpoint at 2323
- c = getc(rixCmdFile);
- tmp = 0;
- while(isdigit(c)) {
- tmp = tmp * 10 + (c - '0');
- c = getc(rixCmdFile);
- }
-#if DEBUG_HPC
- fprintf(stderr,"seting bp for tix %d\n",tmp);
-#endif
- tixBoxBP[tmp] = 1;
- break;
- case 'u': // u2323 -- unset tick box breakpoint at 2323
- c = getc(rixCmdFile);
- tmp = 0;
- while(isdigit(c)) {
- tmp = tmp * 10 + (c - '0');
- c = getc(rixCmdFile);
- }
-#if DEBUG_HPC
- fprintf(stderr,"unseting bp for tix %d\n",tmp);
-#endif
- tixBoxBP[tmp] = 0;
- break;
- case 'x': // x -- set special bp flag
-#if DEBUG_HPC
- fprintf(stderr,"seting specialOpBP = 1\n");
-#endif
- specialOpBP = 1;
- c = getc(rixCmdFile);
- break;
- case 'o': // o -- clear special bp flag
-#if DEBUG_HPC
- fprintf(stderr,"seting specialOpBP = 0\n");
-#endif
- specialOpBP = 0;
- c = getc(rixCmdFile);
- break;
- case 'h': // h -- history of the last few (WOP_SIZE) steps
- if (rixCounter > WOP_SIZE) {
- tmp64 = rixCounter - WOP_SIZE;
- } else {
- tmp64 = 0;
- }
- for(;tmp64 < rixCounter;tmp64++) {
- printEvent(rixFile,tmp64,rixTidBack[tmp64 % WOP_SIZE],rixOpBack[tmp64 % WOP_SIZE]);
- }
- fflush(rixFile);
- c = getc(rixCmdFile);
- break;
- default:
-#if DEBUG_HPC
- fprintf(stderr,"strange command from HPCRIX (%d)\n",c);
-#endif
- c = getc(rixCmdFile);
- }
- while (c != 10) { // the end of the line
- c = getc(rixCmdFile); // to the end of the line
- }
- c = getc(rixCmdFile); // the first char on the next command
- }
-#if DEBUG_HPC
- fprintf(stderr,"re entering program\n");
-#endif
-}