Slide 17
Slide 17 text
inscount1 (Instruction Count) のソース
// This function is called before every block
VOID docount(UINT32 c) { icount += c; }
// Pin calls this function every time a new basic block is encountered
VOID Trace(TRACE trace, VOID *v){
for (BBL bbl = TRACE_BblHead(trace); BBL_Valid(bbl); bbl = BBL_Next(bbl)){
// Insert a call to docount before every bbl, passing the number of instructions
BBL_InsertCall(bbl, IPOINT_BEFORE, (AFUNPTR)docount, IARG_UINT32, BBL_NumIns(bbl), IARG_END);}}
analysis
Instrumentation
VOID Fini(INT32 code, VOID *v){
OutFile.setf(ios::showbase);
OutFile << "Count " << icount << endl;
OutFile.close();}
int main(int argc, char * argv[]){
if (PIN_Init(argc, argv)) return Usage();
OutFile.open(KnobOutputFile.Value().c_str());
TRACE_AddInstrumentFunction(Trace, 0);
PIN_AddFiniFunction(Fini, 0);
PIN_StartProgram(); return 0;}