diff options
author | Zach Reizner <zachr@google.com> | 2018-01-31 12:54:51 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-02-12 22:42:35 -0800 |
commit | 53528e33eda615ef309915447b227d2dcacb2090 (patch) | |
tree | 3a6e80a92de761df09a96ad0596b7982d8f463aa /crosvm_plugin/src | |
parent | bb678718926888701eb17f1ba1c5721592d7f881 (diff) | |
download | crosvm-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.rs | 26 |
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, + } +} |