use crate::prelude::*;
use std::os::raw::c_int;
use std::ffi::CStr;
pub fn in_kernel_mode(cpu: &mut CPUState) -> bool {
unsafe {
panda_sys::panda_in_kernel_mode_external(cpu)
}
}
pub fn in_kernel_code_linux(cpu: &mut CPUState) -> bool {
unsafe {
panda_sys::panda_in_kernel_code_linux_external(cpu)
}
}
pub fn current_asid(cpu: &mut CPUState) -> target_ulong {
unsafe {
panda_sys::panda_current_asid(cpu)
}
}
pub fn current_pc(cpu: &mut CPUState) -> target_ulong {
unsafe {
panda_sys::panda_current_pc(cpu)
}
}
pub fn current_sp(cpu: &mut CPUState) -> target_ulong {
unsafe {
panda_sys::panda_current_sp_external(cpu)
}
}
pub fn current_sp_masked_pagesize(cpu: &mut CPUState, page_size: target_ulong) -> target_ulong {
unsafe {
panda_sys::panda_current_sp_masked_pagesize_external(cpu, page_size)
}
}
pub fn current_ksp(cpu: &mut CPUState) -> target_ulong {
unsafe {
panda_sys::panda_current_ksp_external(cpu)
}
}
pub fn get_ret_val(cpu: &mut CPUState) -> target_ulong {
unsafe {
panda_sys::panda_get_retval_external(cpu)
}
}
pub fn enter_priv(cpu: &mut CPUState) -> bool {
unsafe {
panda_sys::enter_priv(cpu)
}
}
pub fn exit_priv(cpu: &mut CPUState) {
unsafe {
panda_sys::exit_priv(cpu)
}
}
pub fn argc() -> c_int {
unsafe {
panda_sys::panda_argc
}
}
pub fn argv() -> Vec<String> {
let mut rs_argv = Vec::new();
for char_ptr in unsafe { panda_sys::panda_argv }.iter() {
if let Ok(str_slice) = unsafe { CStr::from_ptr(*char_ptr) }.to_str() {
rs_argv.push(str_slice.to_owned());
}
}
rs_argv
}