/************************************************** * Main function * **************************************************/ int main(INT32 argc, CHAR **argv) { // Initialize Pin and TLS PIN_InitSymbols(); PIN_Init(argc, argv); tidKey = PIN_CreateThreadDataKey(0); // Set up output files startsOut.open(KnobThreadsStartsFile.Value().c_str()); finisOut.open(KnobThreadsFinisFile.Value().c_str()); // Verify scenario if (KnobScenario.Value() < 1 || KnobScenario > 6) { fprintf(stderr, "TOOL ERROR: Invalid scenario specified\n%s\n", KnobScenario.StringKnobSummary().c_str()); return 1; } scenario = KnobScenario.Value(); // Register callbacks PIN_AddThreadStartFunction(ThreadStart, 0); PIN_AddThreadFiniFunction(ThreadFini, 0); PIN_AddFiniFunction(Fini, 0); // Start running the application PIN_StartProgram(); // Never returns return 0; }