VOID Handler(CONTROL_EVENT ev, VOID * v, CONTEXT * ctxt, VOID * ip, THREADID tid) { std::cout << "tid: " << tid << " "; std::cout << "ip: " << ip << " " << icount.Count() ; #if defined(TARGET_IA32) || defined(TARGET_IA32E) std::cout << " [ with REP iterations " << icount.CountWithREP() << "] "; #endif switch(ev) { case CONTROL_START: std::cout << "Start" << endl; break; case CONTROL_STOP: std::cout << "Stop" << endl; break; case CONTROL_THREADID: std::cout << "ThreadID" << endl; break; default: ASSERTX(false); break; } }
VOID Handler(CONTROL_EVENT ev, VOID * v, CONTEXT * ctxt, VOID * ip, THREADID tid) { std::cerr << "tid: " << dec << tid << " ip: 0x" << hex << ip; // get line info on current instruction INT32 linenum = 0; string filename; PIN_LockClient(); PIN_GetSourceLocation((ADDRINT)ip, NULL, &linenum, &filename); PIN_UnlockClient(); if(filename != "") { std::cerr << " ( " << filename << ":" << dec << linenum << " )"; } std::cerr << dec << " Inst. Count " << icount.Count(tid) << " "; #if defined(TARGET_IA32) || defined(TARGET_IA32E) std::cerr << " [ with REP iterations " << icount.CountWithREP() << "] "; #endif switch(ev) { case CONTROL_START: std::cerr << "Start" << endl; if(control.PinPointsActive()) { std::cerr << "PinPoint: " << control.CurrentPp(tid) << " PhaseNo: " << control.CurrentPhase(tid) << endl; } break; case CONTROL_STOP: std::cerr << "Stop" << endl; if(control.PinPointsActive()) { std::cerr << "PinPoint: " << control.CurrentPp(tid) << endl; } break; default: ASSERTX(false); break; } }