summary refs log tree commit diff
path: root/crosvm_plugin/src
diff options
context:
space:
mode:
authorZach Reizner <zachr@google.com>2018-01-31 12:54:51 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-02-12 22:42:35 -0800
commit53528e33eda615ef309915447b227d2dcacb2090 (patch)
tree3a6e80a92de761df09a96ad0596b7982d8f463aa /crosvm_plugin/src
parentbb678718926888701eb17f1ba1c5721592d7f881 (diff)
downloadcrosvm-53528e33eda615ef309915447b227d2dcacb2090.tar
crosvm-53528e33eda615ef309915447b227d2dcacb2090.tar.gz
crosvm-53528e33eda615ef309915447b227d2dcacb2090.tar.bz2
crosvm-53528e33eda615ef309915447b227d2dcacb2090.tar.lz
crosvm-53528e33eda615ef309915447b227d2dcacb2090.tar.xz
crosvm-53528e33eda615ef309915447b227d2dcacb2090.tar.zst
crosvm-53528e33eda615ef309915447b227d2dcacb2090.zip
add support for accessing debug registers in the plugin process
The debug registers are useful to access for the plugin process in some
cases.

TEST=cargo test --features plugin; cargo test -p kvm; ./build_test
BUG=chromium:800626

Change-Id: I8f3f6c31c6989061a43cef948cf5b4e64bd52d30
Reviewed-on: https://chromium-review.googlesource.com/896945
Commit-Ready: Zach Reizner <zachr@chromium.org>
Tested-by: Zach Reizner <zachr@chromium.org>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'crosvm_plugin/src')
-rw-r--r--crosvm_plugin/src/lib.rs26
1 files changed, 25 insertions, 1 deletions
diff --git a/crosvm_plugin/src/lib.rs b/crosvm_plugin/src/lib.rs
index 1fb02a1..1482853 100644
--- a/crosvm_plugin/src/lib.rs
+++ b/crosvm_plugin/src/lib.rs
@@ -43,7 +43,7 @@ use sys_util::Scm;
 
 use kvm::dirty_log_bitmap_size;
 
-use kvm_sys::{kvm_regs, kvm_sregs, kvm_fpu};
+use kvm_sys::{kvm_regs, kvm_sregs, kvm_fpu, kvm_debugregs};
 
 use plugin_proto::*;
 
@@ -911,3 +911,27 @@ pub unsafe extern "C" fn crosvm_vcpu_set_fpu(this: *mut crosvm_vcpu, fpu: *const
         Err(e) => e,
     }
 }
+
+#[no_mangle]
+pub unsafe extern "C" fn crosvm_vcpu_get_debugregs(this: *mut crosvm_vcpu,
+                                                   dregs: *mut kvm_debugregs)
+                                                   -> c_int {
+    let this = &mut *this;
+    let dregs = from_raw_parts_mut(dregs as *mut u8, size_of::<kvm_debugregs>());
+    match this.get_state(VcpuRequest_StateSet::DEBUGREGS, dregs) {
+        Ok(_) => 0,
+        Err(e) => e,
+    }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn crosvm_vcpu_set_debugregs(this: *mut crosvm_vcpu,
+                                                   dregs: *const kvm_debugregs)
+                                                   -> c_int {
+    let this = &mut *this;
+    let dregs = from_raw_parts(dregs as *mut u8, size_of::<kvm_debugregs>());
+    match this.set_state(VcpuRequest_StateSet::DEBUGREGS, dregs) {
+        Ok(_) => 0,
+        Err(e) => e,
+    }
+}