diff --git a/fuzzers/wcet_qemu_sys/src/freertos.rs b/fuzzers/wcet_qemu_sys/src/freertos.rs index 9833d9240a..332ef5b672 100644 --- a/fuzzers/wcet_qemu_sys/src/freertos.rs +++ b/fuzzers/wcet_qemu_sys/src/freertos.rs @@ -498,55 +498,6 @@ pub trait emu_lookup { 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::()] = [0u8; std::mem::size_of::()]; - unsafe { - emu.read_mem(addr.into(), &mut tmp); - std::mem::transmute::<[u8; std::mem::size_of::()], 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::()] = [0u8; std::mem::size_of::()]; - unsafe { - emu.read_mem(addr.into(), &mut tmp); - std::mem::transmute::<[u8; std::mem::size_of::()], 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::()] = [0u8; std::mem::size_of::()]; - unsafe { - emu.read_mem(addr.into(), &mut tmp); - std::mem::transmute::<[u8; std::mem::size_of::()], 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::()] = [0u8; std::mem::size_of::()]; - unsafe { - emu.read_mem(addr.into(), &mut tmp); - std::mem::transmute::<[u8; std::mem::size_of::()], 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::()] = [0u8; std::mem::size_of::()]; - unsafe { - emu.read_mem(addr.into(), &mut tmp); - std::mem::transmute::<[u8; std::mem::size_of::()], MiniListItem_t>(tmp) - } - } -} #[derive(Debug, Copy, Clone, Serialize, Deserialize)] pub enum rtos_struct { @@ -554,4 +505,24 @@ pub enum rtos_struct { List_struct(List_t), List_Item_struct(ListItem_t), List_MiniItem_struct(MiniListItem_t), -} \ No newline at end of file +} + +#[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); \ No newline at end of file