* kvm.c (kvm_ioctl): Handle KVM_SET_REGS and KVM_GET_REGES. (kvm_ioctl_decode_regs): New function.
Signed-off-by: Masatake YAMATO <yam...@redhat.com> --- kvm.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/kvm.c b/kvm.c index 43746fef..69a8c97a 100644 --- a/kvm.c +++ b/kvm.c @@ -72,6 +72,55 @@ kvm_ioctl_set_user_memory_region(struct tcb *const tcp, const kernel_ulong_t arg return RVAL_IOCTL_DECODED; } +static int +kvm_ioctl_decode_regs(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg) +{ +#ifdef X86_64 + struct kvm_regs regs; + + if (code == KVM_GET_REGS && entering(tcp)) + return 0; + + if (umove(tcp, arg, ®s) < 0) + return RVAL_DECODED; + + PRINT_FIELD_X(", {", regs, rax); + if (abbrev(tcp)) + tprints(", ..."); + else { + PRINT_FIELD_X(", ", regs, rbx); + PRINT_FIELD_X(", ", regs, rcx); + PRINT_FIELD_X(", ", regs, rdx); + PRINT_FIELD_X(", ", regs, rsi); + PRINT_FIELD_X(", ", regs, rdi); + } + PRINT_FIELD_X(", ", regs, rsp); + PRINT_FIELD_X(", ", regs, rbp); + if (abbrev(tcp)) + tprints(", ..."); + else { + PRINT_FIELD_X(", ", regs, r8); + PRINT_FIELD_X(", ", regs, r9); + PRINT_FIELD_X(", ", regs, r10); + PRINT_FIELD_X(", ", regs, r11); + PRINT_FIELD_X(", ", regs, r12); + PRINT_FIELD_X(", ", regs, r13); + PRINT_FIELD_X(", ", regs, r14); + PRINT_FIELD_X(", ", regs, r15); + } + PRINT_FIELD_X(", ", regs, rip); + + /* TODO: we can decode this more */ + PRINT_FIELD_X(", ", regs, rflags); + + tprints("}"); + + return RVAL_IOCTL_DECODED; +#else + return RVAL_DECODED; +#endif +} + int kvm_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg) { @@ -82,6 +131,9 @@ kvm_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t a return kvm_ioctl_create_vm(tcp, arg); case KVM_SET_USER_MEMORY_REGION: return kvm_ioctl_set_user_memory_region(tcp, arg); + case KVM_SET_REGS: + case KVM_GET_REGS: + return kvm_ioctl_decode_regs(tcp, code, arg); /* Commands not taking any arguments. */ case KVM_RUN: -- 2.13.6 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel