From patchwork Wed May 4 19:43:51 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 754712 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p44Jie50026513 for ; Wed, 4 May 2011 19:44:40 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755655Ab1EDToh (ORCPT ); Wed, 4 May 2011 15:44:37 -0400 Received: from fmmailgate02.web.de ([217.72.192.227]:51155 "EHLO fmmailgate02.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755569Ab1EDToS (ORCPT ); Wed, 4 May 2011 15:44:18 -0400 Received: from smtp04.web.de ( [172.20.0.225]) by fmmailgate02.web.de (Postfix) with ESMTP id 8CE6F19EB2ABC; Wed, 4 May 2011 21:44:17 +0200 (CEST) Received: from [88.64.22.120] (helo=localhost.localdomain) by smtp04.web.de with asmtp (TLSv1:AES256-SHA:256) (WEB.DE 4.110 #2) id 1QHhzd-0006mo-01; Wed, 04 May 2011 21:44:17 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org Subject: [PATCH 17/19] qemu-kvm: Replace kvm_show_regs/code with cpu_dump_state Date: Wed, 4 May 2011 21:43:51 +0200 Message-Id: <0b71fd6477559ea55a4fcc43e38732d013d2a9cf.1304538230.git.jan.kiszka@web.de> X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: X-Sender: jan.kiszka@web.de X-Provags-ID: V01U2FsdGVkX1/H7SRWRug5TrmjBk7GYSdXs5aPn/z9M7sTq1BH R7qntcFkuWMdQp2ROl8+eEs0QjIwGYC7QJym7MfdkrdJfvThBf vpgQLeokU= Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 04 May 2011 19:44:40 +0000 (UTC) From: Jan Kiszka The latter provides even more information. Signed-off-by: Jan Kiszka --- qemu-kvm-x86.c | 95 -------------------------------------------------------- qemu-kvm.c | 7 ++-- qemu-kvm.h | 17 ---------- 3 files changed, 3 insertions(+), 116 deletions(-) diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c index c0061a1..df4f0b4 100644 --- a/qemu-kvm-x86.c +++ b/qemu-kvm-x86.c @@ -319,101 +319,6 @@ int kvm_has_pit_state2(kvm_context_t kvm) return r; } -void kvm_show_code(CPUState *env) -{ -#define SHOW_CODE_LEN 50 - struct kvm_regs regs; - struct kvm_sregs sregs; - int r, n; - int back_offset; - unsigned char code; - char code_str[SHOW_CODE_LEN * 3 + 1]; - unsigned long rip; - - r = kvm_vcpu_ioctl(env, KVM_GET_SREGS, &sregs); - if (r < 0 ) { - perror("KVM_GET_SREGS"); - return; - } - r = kvm_vcpu_ioctl(env, KVM_GET_REGS, ®s); - if (r < 0) { - perror("KVM_GET_REGS"); - return; - } - rip = sregs.cs.base + regs.rip; - back_offset = regs.rip; - if (back_offset > 20) { - back_offset = 20; - } - *code_str = 0; - for (n = -back_offset; n < SHOW_CODE_LEN-back_offset; ++n) { - if (n == 0) { - strcat(code_str, " -->"); - } - cpu_physical_memory_rw(rip + n, &code, 1, 1); - sprintf(code_str + strlen(code_str), " %02x", code); - } - fprintf(stderr, "code:%s\n", code_str); -} - -static void print_seg(FILE *file, const char *name, struct kvm_segment *seg) -{ - fprintf(stderr, - "%s %04x (%08llx/%08x p %d dpl %d db %d s %d type %x l %d" - " g %d avl %d)\n", - name, seg->selector, seg->base, seg->limit, seg->present, - seg->dpl, seg->db, seg->s, seg->type, seg->l, seg->g, - seg->avl); -} - -static void print_dt(FILE *file, const char *name, struct kvm_dtable *dt) -{ - fprintf(stderr, "%s %llx/%x\n", name, dt->base, dt->limit); -} - -void kvm_show_regs(CPUState *env) -{ - struct kvm_regs regs; - struct kvm_sregs sregs; - int r; - - r = kvm_vcpu_ioctl(env, KVM_GET_REGS, ®s); - if (r < 0) { - perror("KVM_GET_REGS"); - return; - } - fprintf(stderr, - "rax %016llx rbx %016llx rcx %016llx rdx %016llx\n" - "rsi %016llx rdi %016llx rsp %016llx rbp %016llx\n" - "r8 %016llx r9 %016llx r10 %016llx r11 %016llx\n" - "r12 %016llx r13 %016llx r14 %016llx r15 %016llx\n" - "rip %016llx rflags %08llx\n", - regs.rax, regs.rbx, regs.rcx, regs.rdx, - regs.rsi, regs.rdi, regs.rsp, regs.rbp, - regs.r8, regs.r9, regs.r10, regs.r11, - regs.r12, regs.r13, regs.r14, regs.r15, - regs.rip, regs.rflags); - r = kvm_vcpu_ioctl(env, KVM_GET_SREGS, &sregs); - if (r < 0) { - perror("KVM_GET_SREGS"); - return; - } - print_seg(stderr, "cs", &sregs.cs); - print_seg(stderr, "ds", &sregs.ds); - print_seg(stderr, "es", &sregs.es); - print_seg(stderr, "ss", &sregs.ss); - print_seg(stderr, "fs", &sregs.fs); - print_seg(stderr, "gs", &sregs.gs); - print_seg(stderr, "tr", &sregs.tr); - print_seg(stderr, "ldt", &sregs.ldt); - print_dt(stderr, "gdt", &sregs.gdt); - print_dt(stderr, "idt", &sregs.idt); - fprintf(stderr, "cr0 %llx cr2 %llx cr3 %llx cr4 %llx cr8 %llx" - " efer %llx\n", - sregs.cr0, sregs.cr2, sregs.cr3, sregs.cr4, sregs.cr8, - sregs.efer); -} - static void kvm_set_cr8(CPUState *env, uint64_t cr8) { env->kvm_run->cr8 = cr8; diff --git a/qemu-kvm.c b/qemu-kvm.c index bd595b1..55de971 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -425,8 +425,7 @@ int kvm_run(CPUState *env) case KVM_EXIT_EXCEPTION: fprintf(stderr, "exception %d (%x)\n", run->ex.exception, run->ex.error_code); - kvm_show_regs(env); - kvm_show_code(env); + cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE); abort(); break; case KVM_EXIT_IO: @@ -463,7 +462,7 @@ int kvm_run(CPUState *env) r = kvm_arch_run(env); if (r < 0) { fprintf(stderr, "unhandled vm exit: 0x%x\n", run->exit_reason); - kvm_show_regs(env); + cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE); abort(); } if (r > 0) { @@ -988,7 +987,7 @@ int kvm_cpu_exec(CPUState *env) r = kvm_run(env); if (r < 0) { printf("kvm_run returned %d\n", r); - kvm_show_regs(env); + cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE); vm_stop(VMSTOP_PANIC); } diff --git a/qemu-kvm.h b/qemu-kvm.h index 0814883..752aebd 100644 --- a/qemu-kvm.h +++ b/qemu-kvm.h @@ -68,9 +68,6 @@ int kvm_arch_create(kvm_context_t kvm); int kvm_arch_run(CPUState *env); - -void kvm_show_code(CPUState *env); - int handle_halt(CPUState *env); int handle_shutdown(kvm_context_t kvm, CPUState *env); @@ -139,20 +136,6 @@ int kvm_set_shadow_pages(kvm_context_t kvm, unsigned int nrshadow_pages); #endif -/*! - * \brief Dump VCPU registers - * - * This dumps some of the information that KVM has about a virtual CPU, namely: - * - GP Registers - * - * A much more verbose version of this is available as kvm_dump_vcpu() - * - * \param kvm Pointer to the current kvm_context - * \param vcpu Which virtual CPU should get dumped - * \return 0 on success - */ -void kvm_show_regs(CPUState *env); - int kvm_set_irq_level(kvm_context_t kvm, int irq, int level, int *status); #ifdef KVM_CAP_IRQCHIP