static void allstep () { long i; for (i=0; i<procs; i++) { if (!process_step(i,processes[i])) { if (processes[i] && processes[i]->active) { // document final PC position if (output) fprintf(output, "%ld,%ld,%ld,%ld,%ld,unload\n", sysclock, i, processes[i]->pid, processes[i]->kind, processes[i]->pc); if (pages) { long j; for (j=0; j<MAXPROCPAGES; j++) fprintf(pages,"%ld,%ld,%ld,%ld,%ld,out\n", sysclock,i,j,processes[i]->pid, processes[i]->kind); } process_unload(i,processes[i]); } processes[i]=NULL; if (!empty()) { processes[i]=dequeue(); sim_log(LOG_LOAD,"process %2d; pc %04d: loaded\n",i, processes[i]->pc); if (output) fprintf(output, "%ld,%ld,%ld,%ld,%ld,load\n", sysclock, i, processes[i]->pid, processes[i]->kind, processes[i]->pc); } } } }
/* * This is the entry point for unloading a process with omnius. */ int omnius_unload(blob_t *blob) { int ret = EXIT_FAILURE; /* find the proc based on pid */ secmem_process_t *proc = g_pid_lookup[blob->head.pid]; if (proc) { ret = process_unload(blob, proc); free(proc); } g_pid_lookup[blob->head.pid] = NULL; return ret; }