# HG changeset patch # User Jerone Young <[EMAIL PROTECTED]> # Date 1193999513 18000 # Node ID 4b9058a7e809c1f463256f47bd499e9a9d990ca8 # Parent 1eeb2919a59229d76aa856e782ebb622aacf5013 Move kvm_show_code to libkvm-x86.c
Signed-off-by: Jerone Young <[EMAIL PROTECTED]> diff --git a/libkvm/kvm-x86.h b/libkvm/kvm-x86.h --- a/libkvm/kvm-x86.h +++ b/libkvm/kvm-x86.h @@ -47,4 +47,6 @@ int kvm_get_msrs(kvm_context_t, int vcpu int kvm_get_msrs(kvm_context_t, int vcpu, struct kvm_msr_entry *msrs, int n); int kvm_set_msrs(kvm_context_t, int vcpu, struct kvm_msr_entry *msrs, int n); +void kvm_show_code(kvm_context_t kvm, int vcpu); + #endif diff --git a/libkvm/libkvm-x86.c b/libkvm/libkvm-x86.c --- a/libkvm/libkvm-x86.c +++ b/libkvm/libkvm-x86.c @@ -760,3 +760,42 @@ int kvm_setup_cpuid(kvm_context_t kvm, i return r; } +void kvm_show_code(kvm_context_t kvm, int vcpu) +{ +#define CR0_PE_MASK (1ULL<<0) + int fd = kvm->vcpu_fd[vcpu]; + struct kvm_regs regs; + struct kvm_sregs sregs; + int r; + unsigned char code[50]; + int back_offset; + char code_str[sizeof(code) * 3 + 1]; + unsigned long rip; + + r = ioctl(fd, KVM_GET_SREGS, &sregs); + if (r == -1) { + perror("KVM_GET_SREGS"); + return; + } + if (sregs.cr0 & CR0_PE_MASK) + return; + + r = ioctl(fd, KVM_GET_REGS, ®s); + if (r == -1) { + perror("KVM_GET_REGS"); + return; + } + rip = sregs.cs.base + regs.rip; + back_offset = regs.rip; + if (back_offset > 20) + back_offset = 20; + memcpy(code, kvm->physical_memory + rip - back_offset, sizeof code); + *code_str = 0; + for (r = 0; r < sizeof code; ++r) { + if (r == back_offset) + strcat(code_str, " -->"); + sprintf(code_str + strlen(code_str), " %02x", code[r]); + } + fprintf(stderr, "code:%s\n", code_str); +} + diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c --- a/libkvm/libkvm.c +++ b/libkvm/libkvm.c @@ -637,45 +637,6 @@ int kvm_set_sregs(kvm_context_t kvm, int return ioctl(kvm->vcpu_fd[vcpu], KVM_SET_SREGS, sregs); } -static void kvm_show_code(kvm_context_t kvm, int vcpu) -{ -#define CR0_PE_MASK (1ULL<<0) - int fd = kvm->vcpu_fd[vcpu]; - struct kvm_regs regs; - struct kvm_sregs sregs; - int r; - unsigned char code[50]; - int back_offset; - char code_str[sizeof(code) * 3 + 1]; - unsigned long rip; - - r = ioctl(fd, KVM_GET_SREGS, &sregs); - if (r == -1) { - perror("KVM_GET_SREGS"); - return; - } - if (sregs.cr0 & CR0_PE_MASK) - return; - - r = ioctl(fd, KVM_GET_REGS, ®s); - if (r == -1) { - perror("KVM_GET_REGS"); - return; - } - rip = sregs.cs.base + regs.rip; - back_offset = regs.rip; - if (back_offset > 20) - back_offset = 20; - memcpy(code, kvm->physical_memory + rip - back_offset, sizeof code); - *code_str = 0; - for (r = 0; r < sizeof code; ++r) { - if (r == back_offset) - strcat(code_str, " -->"); - sprintf(code_str + strlen(code_str), " %02x", code[r]); - } - fprintf(stderr, "code:%s\n", code_str); -} - static int handle_mmio(kvm_context_t kvm, struct kvm_run *kvm_run) { unsigned long addr = kvm_run->mmio.phys_addr; ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel