extern "C" void *qemuesesc_main_bootstrap(void *threadargs) { static bool qemuStarted = false; if (!qemuStarted) { qemuStarted = true; QEMUArgs *qdata = (struct QEMUArgs *) threadargs; int qargc = qdata->qargc; char **qargv = qdata->qargv; MSG("Starting qemu with"); for(int i = 0; i < qargc; i++) MSG("arg[%d] is: %s",i,qargv[i]); qemuesesc_main(qargc,qargv,NULL); MSG("qemu done"); exit(0); }else{ MSG("QEMU already started! Ignoring the new start."); } return 0; }
//This function is used to initialize the emulator in order to fork checkpoints void create_checkpoints (int64_t argc, char **argv) { char **qargv = (char **) malloc(argc*sizeof(char **)); qargv = (char **)malloc(argc*sizeof(char*)); qargv[0] = (char *) "live"; for(int64_t j = 1; j < argc; j++) { qargv[j] = strdup(argv[j]); } nchecks = ncheckpoints; load_rabbit(); child_id = 0; qemuesesc_main(argc,qargv,0); }