updateTCStateMisc();
}
-Tick
-ArmKvmCPU::onKvmExitHypercall()
-{
- ThreadContext *tc(getContext(0));
- const uint32_t reg_ip(tc->readIntRegFlat(INTREG_R12));
- const uint8_t func((reg_ip >> 8) & 0xFF);
-
- DPRINTF(Kvm, "KVM Hypercall: %#x/%#x\n", func, subfunc);
- const uint64_t ret =
- PseudoInst::pseudoInst<PseudoInstABI>(getContext(0), func);
-
- // Just set the return value using the KVM API instead of messing
- // with the context. We could have used the context, but that
- // would have required us to request a full context sync.
- setOneReg(REG_CORE32(usr_regs.ARM_r0), ret & 0xFFFFFFFF);
- setOneReg(REG_CORE32(usr_regs.ARM_r1), (ret >> 32) & 0xFFFFFFFF);
-
- return 0;
-}
-
const ArmKvmCPU::RegIndexVector &
ArmKvmCPU::getRegList() const
{