Dump registers after KVM_RUN returns

Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
This commit is contained in:
Pekka Enberg
2010-03-24 18:09:16 +02:00
committed by Will Deacon
parent 696a1b0a7d
commit 7118d2cabe
+31
View File
@@ -141,6 +141,35 @@ static void kvm__run(struct kvm *self)
die_perror("KVM_RUN ioctl");
}
static void kvm__show_registers(struct kvm *self)
{
unsigned long rax, rbx, rcx;
unsigned long rdx, rsi, rdi;
unsigned long rbp, r8, r9;
unsigned long r10, r11, r12;
unsigned long r13, r14, r15;
unsigned long rip, rsp;
struct kvm_regs regs;
if (ioctl(self->vcpu_fd, KVM_GET_REGS, &regs) < 0)
die("KVM_GET_REGS failed");
rip = regs.rip; rsp = regs.rsp;
rax = regs.rax; rbx = regs.rbx; rcx = regs.rcx;
rdx = regs.rdx; rsi = regs.rsi; rdi = regs.rdi;
rbp = regs.rbp; r8 = regs.r8; r9 = regs.r9;
r10 = regs.r10; r11 = regs.r11; r12 = regs.r12;
r13 = regs.r13; r14 = regs.r14; r15 = regs.r15;
printf("Registers:\n");
printf(" rip: %016lx rsp: %016lx\n", rip, rsp);
printf(" rax: %016lx ebx: %016lx ecx: %016lx\n", rax, rbx, rcx);
printf(" rdx: %016lx rsi: %016lx rdi: %016lx\n", rdx, rsi, rdi);
printf(" rbp: %016lx r8: %016lx r9: %016lx\n", rbp, r8, r9);
printf(" r10: %016lx r11: %016lx r12: %016lx\n", r10, r11, r12);
printf(" r13: %016lx r14: %016lx r15: %016lx\n", r13, r14, r15);
}
static inline void *guest_addr_to_host(struct kvm *self, unsigned long offset)
{
return self->ram_start + offset;
@@ -235,5 +264,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "KVM exit reason: %" PRIu32 " (\"%s\")\n",
kvm->kvm_run->exit_reason, exit_reasons[kvm->kvm_run->exit_reason]);
kvm__show_registers(kvm);
return 0;
}