/* Set a CPU register */ static int cmd_set_cpu_reg(hypervisor_conn_t *conn,int argc,char *argv[]) { vm_instance_t *vm; cpu_gen_t *cpu; int reg_index; if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM))) return(-1); cpu = cpu_group_find_id(vm->cpu_group,atoi(argv[1])); reg_index = atoi(argv[2]); if (!cpu || (reg_index < 1)) { vm_release(vm); hypervisor_send_reply(conn,HSC_ERR_BAD_OBJ,1,"Bad CPU or register"); return(-1); } /* Set register value */ cpu->reg_set(cpu,reg_index,strtoull(argv[3],NULL,0)); vm_release(vm); hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); return(0); }
/* Show CPU MMU info */ static int cmd_show_cpu_mmu(hypervisor_conn_t *conn,int argc,char *argv[]) { vm_instance_t *vm; cpu_gen_t *cpu; if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM))) return(-1); if ((cpu = cpu_group_find_id(vm->cpu_group,atoi(argv[1]))) != NULL) cpu->mmu_dump(cpu); vm_release(vm); hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); return(0); }
/* Find the specified CPU */ static cpu_gen_t *find_cpu(hypervisor_conn_t *conn,vm_instance_t *vm, u_int cpu_id) { cpu_gen_t *cpu; cpu = cpu_group_find_id(vm->cpu_group,cpu_id); if (!cpu) { vm_release(vm); hypervisor_send_reply(conn,HSC_ERR_BAD_OBJ,1,"Bad CPU specified"); return NULL; } return cpu; }
/* Add a breakpoint */ static int cmd_add_cpu_breakpoint(hypervisor_conn_t *conn, int argc,char *argv[]) { vm_instance_t *vm; cpu_gen_t *cpu; m_uint64_t addr; if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM))) return(-1); if (!(cpu = cpu_group_find_id(vm->cpu_group,atoi(argv[1])))) { vm_release(vm); hypervisor_send_reply(conn,HSC_ERR_BAD_OBJ,1,"Bad CPU"); return(-1); } addr = strtoull(argv[2],NULL,0); cpu->add_breakpoint(cpu,addr); vm_release(vm); hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); return(0); }