int main(int argc, char **argv) { int sfiford; int sfifowr; int mfiford; int mfifowr; double x; int opID; double param; int i; int iWaitTime = 5; int iParams; int iLookedUp; struct result res; FILE *fPids; pid_t clientpid; initSignals(); if(argc > 16) { fprintf(stderr, "You can enter maximum 16 command-line arguments"); exit(1); } if(argc < 6) { fprintf(stderr, "You cannot enter less than 6 command-line arguments"); exit(1); } fPids = fopen(PIDS, "a"); fprintf(fPids, "%d\n", getpid()); fclose(fPids); sprintf(sMainFifoName, "%s", &argv[1][1]); mkfifo(sMainFifoName, 0666); iWaitTime = atoi(&argv[2][1]); opID = atoi(&argv[3][1]); iLookedUp = 4; switch(opID) { case 1: res.opId = 1; break; case 2: res.opId = 2; break; case 3: res.opId = 3; break; case 4: res.opId = 4; break; default: fprintf(stderr, "Usage: You cannot enter less than 1 and grater that 4 as operation.\n"); exit(1); } iParams = getParamNum(opID); clientpid = getpid(); mfifowr = open(sMainFifoName, O_WRONLY); if (write(mfifowr, &clientpid, sizeof(clientpid)) < 0 || write(mfifowr, &opID, sizeof(opID)) < 0 || write(mfifowr, &iWaitTime, sizeof(iWaitTime)) < 0) { perror("write op"); quit(EXIT_FAILURE); } close(mfifowr); mfiford = open(sMainFifoName, O_RDONLY); if(read(mfiford, &sspid, sizeof(sspid)) < 0 ||read(mfiford, &serverpid, sizeof(serverpid)) < 0 || read(mfiford, sServerFifoName, sizeof(sServerFifoName)) < 0) { perror("read client fifo"); quit(EXIT_FAILURE); } close(mfiford); snprintf(sLogFileName, MAX, LOG_FILE_NAME, (long)serverpid); fprintf(stdout, "client got pid and sServerFifoName name from main fifo: %d, %s\n", serverpid, sServerFifoName); mkfifo(sServerFifoName, 0666); while(iLookedUp + iParams <= argc) { sfifowr = open(sServerFifoName, O_WRONLY); fprintf(stdout, "Sending parameters to math-server "); for(i = 0; i < iParams; ++i) { param = (double) atoi(&argv[iLookedUp++][1]); if(write(sfifowr, ¶m, sizeof(param)) < 0) { perror("write client fifo"); quit(EXIT_FAILURE); } fprintf(stdout, "%f ", param); } fprintf(stdout, "\n"); close(sfifowr); sfiford = open(sServerFifoName, O_RDONLY); if(read(sfiford, &res, sizeof(res)) < 0) { perror("read server fifo"); quit(EXIT_FAILURE); } close(sfiford); if(handlerflag != 1) { appendLog(sLogFileName, serverpid, sServerFifoName); writeResultsToLog(sLogFileName, &res); writeResultsToConsole(&res); } else handlerflag = 0; } sfifowr = open(sServerFifoName, O_WRONLY); x = -9999.0; write(sfifowr, &x, sizeof(x)); close(sfifowr); unlink(sServerFifoName); return 0; }
//This function outputs Prno2Vreg after Dex register allocation. bool DexRegion::process(OptCtx * oc) { if (getIRList() == NULL) { return true; } OC_show_comp_time(*oc) = g_show_comp_time; g_indent = 0; if (!g_silence) { LOG("DexRegion process %s", getRegionName()); } //note("\n==---- REGION_NAME:%s ----==", getRegionName()); prescan(getIRList()); PassMgr * passmgr = initPassMgr(); HighProcess(*oc); MiddleProcess(*oc); ASSERT0(getPassMgr()); PRSSAMgr * ssamgr = (PRSSAMgr*)passmgr->queryPass(PASS_PR_SSA_MGR); if (ssamgr != NULL && ssamgr->isSSAConstructed()) { ssamgr->destruction(); } if (!g_retain_pass_mgr_for_region) { //Destroy PassMgr. destroyPassMgr(); } if (!is_function()) { return true; } /////////////////////////////////////// //DO NOT REQUEST PASS AFTER THIS LINE// /////////////////////////////////////// BBList * bbl = getBBList(); if (bbl->get_elem_count() == 0) { return true; } ASSERT0(verifyIRandBB(bbl, this)); RefineCtx rf; RC_insert_cvt(rf) = false; //Do not insert cvt for DEX code. refineBBlist(bbl, rf); ASSERT0(verifyIRandBB(bbl, this)); if (g_do_dex_ra) { Prno2Vreg * original_prno2vreg = getDex2IR()->getPR2Vreg(); RA ra(this, getTypeIndexRep(), getParamNum(), getOrgVregNum(), getDex2IR()->getVreg2PR(), original_prno2vreg, &m_var2pr); LOG("\t\tdo DEX Register Allcation for '%s'", getRegionName()); ra.perform(*oc); updateRAresult(ra, *getPrno2Vreg()); } else { //Do not allocate register. getPrno2Vreg()->clean(); getPrno2Vreg()->copy(*getDex2IR()->getPR2Vreg()); } return true; }