optimize trace_reads

This commit is contained in:
Alwin Berger 2025-09-04 09:26:51 +00:00
parent 083adc7e38
commit a99f206e7a

View File

@ -12,7 +12,7 @@ use super::{
};
pub mod qemu_module {
use std::borrow::Cow;
use std::{borrow::Cow, cmp::min};
use std::ops::Range;
use freertos::FreeRTOSTraceMetadata;
@ -500,19 +500,16 @@ pub fn trace_reads<QT, S>(
S: UsesInput,
QT: EmulatorModuleTuple<S>,
{
if size == 0 {
if unsafe{!INPUT_MEM.contains(&addr)} || size == 0 {
return;
}
let input_mem = unsafe { (&raw const INPUT_MEM).as_ref().unwrap() };
let mut buf = vec![0u8; size];
let mut buf = vec![0u8; min(size, (unsafe{INPUT_MEM.end} - addr) as usize)];
let emulator = hooks.qemu();
unsafe {
emulator.read_mem(addr, &mut buf);
for (i, &byte) in buf.iter().enumerate() {
let curr_addr = addr.wrapping_add(i as GuestAddr);
if input_mem.contains(&curr_addr) {
(&raw mut MEM_READ).as_mut().unwrap().push((curr_addr, byte));
}
(&raw mut MEM_READ).as_mut().unwrap().push((curr_addr, byte));
}
}
}