emu lookup as macro

This commit is contained in:
Alwin Berger 2022-02-15 23:39:48 +01:00
parent 44faa80556
commit 1650545424

View File

@ -498,55 +498,6 @@ pub trait emu_lookup {
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> Self; fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> Self;
} }
impl emu_lookup for xLIST_ITEM {
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> xLIST_ITEM {
let mut tmp : [u8; std::mem::size_of::<xLIST_ITEM>()] = [0u8; std::mem::size_of::<xLIST_ITEM>()];
unsafe {
emu.read_mem(addr.into(), &mut tmp);
std::mem::transmute::<[u8; std::mem::size_of::<xLIST_ITEM>()], xLIST_ITEM>(tmp)
}
}
}
impl emu_lookup for TCB_t {
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> TCB_t {
let mut tmp : [u8; std::mem::size_of::<TCB_t>()] = [0u8; std::mem::size_of::<TCB_t>()];
unsafe {
emu.read_mem(addr.into(), &mut tmp);
std::mem::transmute::<[u8; std::mem::size_of::<TCB_t>()], TCB_t>(tmp)
}
}
}
impl emu_lookup for void_ptr {
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> void_ptr {
let mut tmp : [u8; std::mem::size_of::<void_ptr>()] = [0u8; std::mem::size_of::<void_ptr>()];
unsafe {
emu.read_mem(addr.into(), &mut tmp);
std::mem::transmute::<[u8; std::mem::size_of::<void_ptr>()], void_ptr>(tmp)
}
}
}
impl emu_lookup for List_t {
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> List_t {
let mut tmp : [u8; std::mem::size_of::<List_t>()] = [0u8; std::mem::size_of::<List_t>()];
unsafe {
emu.read_mem(addr.into(), &mut tmp);
std::mem::transmute::<[u8; std::mem::size_of::<List_t>()], List_t>(tmp)
}
}
}
impl emu_lookup for MiniListItem_t {
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> MiniListItem_t {
let mut tmp : [u8; std::mem::size_of::<MiniListItem_t>()] = [0u8; std::mem::size_of::<MiniListItem_t>()];
unsafe {
emu.read_mem(addr.into(), &mut tmp);
std::mem::transmute::<[u8; std::mem::size_of::<MiniListItem_t>()], MiniListItem_t>(tmp)
}
}
}
#[derive(Debug, Copy, Clone, Serialize, Deserialize)] #[derive(Debug, Copy, Clone, Serialize, Deserialize)]
pub enum rtos_struct { pub enum rtos_struct {
@ -554,4 +505,24 @@ pub enum rtos_struct {
List_struct(List_t), List_struct(List_t),
List_Item_struct(ListItem_t), List_Item_struct(ListItem_t),
List_MiniItem_struct(MiniListItem_t), List_MiniItem_struct(MiniListItem_t),
} }
#[macro_export]
macro_rules! impl_emu_lookup {
($struct_name:ident) => {
impl $crate::freertos::emu_lookup for $struct_name {
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> $struct_name {
let mut tmp : [u8; std::mem::size_of::<$struct_name>()] = [0u8; std::mem::size_of::<$struct_name>()];
unsafe {
emu.read_mem(addr.into(), &mut tmp);
std::mem::transmute::<[u8; std::mem::size_of::<$struct_name>()], $struct_name>(tmp)
}
}
}
};
}
impl_emu_lookup!(TCB_t);
impl_emu_lookup!(List_t);
impl_emu_lookup!(ListItem_t);
impl_emu_lookup!(MiniListItem_t);
impl_emu_lookup!(void_ptr);