]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Dump registers after KVM_RUN returns
authorPekka Enberg <penberg@cs.helsinki.fi>
Wed, 24 Mar 2010 16:09:16 +0000 (18:09 +0200)
committerPekka Enberg <penberg@cs.helsinki.fi>
Wed, 24 Mar 2010 16:09:16 +0000 (18:09 +0200)
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
tools/kvm/kvm.c

index e670799b65041b1ee5074fcb0db2fb40474a5568..62f8d04d35459f67e2a64ed169dd7e6d14435cfa 100644 (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;
 }