add delay list overflow
This commit is contained in:
parent
61ff3e3196
commit
d179343a63
@ -130,6 +130,9 @@ pub fn fuzz() {
|
|||||||
let task_delay_addr = elf
|
let task_delay_addr = elf
|
||||||
.resolve_symbol("pxDelayedTaskList", 0)
|
.resolve_symbol("pxDelayedTaskList", 0)
|
||||||
.expect("Symbol pxDelayedTaskList not found");
|
.expect("Symbol pxDelayedTaskList not found");
|
||||||
|
let task_delay_overflow_addr = elf
|
||||||
|
.resolve_symbol("pxOverflowDelayedTaskList", 0)
|
||||||
|
.expect("Symbol pxOverflowDelayedTaskList not found");
|
||||||
// let task_queue_addr = virt2phys(task_queue_addr,&elf.goblin());
|
// let task_queue_addr = virt2phys(task_queue_addr,&elf.goblin());
|
||||||
#[cfg(feature = "systemstate")]
|
#[cfg(feature = "systemstate")]
|
||||||
println!("Task Queue at {:#x}", task_queue_addr);
|
println!("Task Queue at {:#x}", task_queue_addr);
|
||||||
@ -345,7 +348,7 @@ pub fn fuzz() {
|
|||||||
let qhelpers = tuple_list!(
|
let qhelpers = tuple_list!(
|
||||||
QemuEdgeCoverageHelper::default(),
|
QemuEdgeCoverageHelper::default(),
|
||||||
QemuStateRestoreHelper::new(),
|
QemuStateRestoreHelper::new(),
|
||||||
QemuSystemStateHelper::new(svh,curr_tcb_pointer,task_queue_addr,task_delay_addr,input_counter_ptr,app_range.clone())
|
QemuSystemStateHelper::new(svh,curr_tcb_pointer,task_queue_addr,task_delay_addr,task_delay_overflow_addr,input_counter_ptr,app_range.clone())
|
||||||
);
|
);
|
||||||
let mut hooks = QemuHooks::new(&emu,qhelpers);
|
let mut hooks = QemuHooks::new(&emu,qhelpers);
|
||||||
|
|
||||||
|
@ -114,6 +114,10 @@ impl SysGraphNode {
|
|||||||
let mut ret = String::new();
|
let mut ret = String::new();
|
||||||
ret.push_str(&format!("{}#{}",&self.base.current_task.0.task_name,&self.base.current_task.1));
|
ret.push_str(&format!("{}#{}",&self.base.current_task.0.task_name,&self.base.current_task.1));
|
||||||
ret.push_str("\nRl:");
|
ret.push_str("\nRl:");
|
||||||
|
for i in &self.base.ready_list_after {
|
||||||
|
ret.push_str(&format!("\n{}#{}",i.0.task_name,i.1));
|
||||||
|
}
|
||||||
|
ret.push_str("\nDl:");
|
||||||
for i in &self.base.delay_list_after {
|
for i in &self.base.delay_list_after {
|
||||||
ret.push_str(&format!("\n{}#{}",i.0.task_name,i.1));
|
ret.push_str(&format!("\n{}#{}",i.0.task_name,i.1));
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,7 @@ pub struct QemuSystemStateHelper {
|
|||||||
tcb_addr: u32,
|
tcb_addr: u32,
|
||||||
ready_queues: u32,
|
ready_queues: u32,
|
||||||
delay_queue: u32,
|
delay_queue: u32,
|
||||||
|
delay_queue_overflow: u32,
|
||||||
input_counter: Option<u64>,
|
input_counter: Option<u64>,
|
||||||
app_range: Range<u32>,
|
app_range: Range<u32>,
|
||||||
}
|
}
|
||||||
@ -50,6 +51,7 @@ impl QemuSystemStateHelper {
|
|||||||
tcb_addr: u32,
|
tcb_addr: u32,
|
||||||
ready_queues: u32,
|
ready_queues: u32,
|
||||||
delay_queue: u32,
|
delay_queue: u32,
|
||||||
|
delay_queue_overflow: u32,
|
||||||
input_counter: Option<u64>,
|
input_counter: Option<u64>,
|
||||||
app_range: Range<u32>,
|
app_range: Range<u32>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
@ -58,6 +60,7 @@ impl QemuSystemStateHelper {
|
|||||||
tcb_addr: tcb_addr,
|
tcb_addr: tcb_addr,
|
||||||
ready_queues: ready_queues,
|
ready_queues: ready_queues,
|
||||||
delay_queue,
|
delay_queue,
|
||||||
|
delay_queue_overflow,
|
||||||
input_counter: input_counter,
|
input_counter: input_counter,
|
||||||
app_range,
|
app_range,
|
||||||
}
|
}
|
||||||
@ -164,6 +167,11 @@ fn trigger_collection(emulator: &Emulator, h: &QemuSystemStateHelper) {
|
|||||||
target = freertos::emu_lookup::lookup(emulator, target);
|
target = freertos::emu_lookup::lookup(emulator, target);
|
||||||
systemstate.delay_list = read_freertos_list(&mut systemstate, emulator, target);
|
systemstate.delay_list = read_freertos_list(&mut systemstate, emulator, target);
|
||||||
|
|
||||||
|
// Extract delay list overflow
|
||||||
|
let mut target : u32 = h.delay_queue_overflow;
|
||||||
|
target = freertos::emu_lookup::lookup(emulator, target);
|
||||||
|
systemstate.delay_list_overflow = read_freertos_list(&mut systemstate, emulator, target);
|
||||||
|
|
||||||
// Extract priority lists
|
// Extract priority lists
|
||||||
for i in 0..NUM_PRIOS {
|
for i in 0..NUM_PRIOS {
|
||||||
let target : u32 = listbytes*u32::try_from(i).unwrap()+h.ready_queues;
|
let target : u32 = listbytes*u32::try_from(i).unwrap()+h.ready_queues;
|
||||||
|
@ -125,6 +125,8 @@ fn refine_system_states(input: &mut Vec<RawFreeRTOSSystemState>) -> Vec<RefinedF
|
|||||||
}
|
}
|
||||||
// collect delay list
|
// collect delay list
|
||||||
let mut delay_list : Vec::<RefinedTCB> = tcb_list_to_vec_cached(i.delay_list, &mut i.dumping_ground).iter().map(|x| RefinedTCB::from_tcb(x)).collect();
|
let mut delay_list : Vec::<RefinedTCB> = tcb_list_to_vec_cached(i.delay_list, &mut i.dumping_ground).iter().map(|x| RefinedTCB::from_tcb(x)).collect();
|
||||||
|
let mut delay_list_overflow : Vec::<RefinedTCB> = tcb_list_to_vec_cached(i.delay_list_overflow, &mut i.dumping_ground).iter().map(|x| RefinedTCB::from_tcb(x)).collect();
|
||||||
|
delay_list.append(&mut delay_list_overflow);
|
||||||
delay_list.sort_by(|a,b| a.task_name.cmp(&b.task_name));
|
delay_list.sort_by(|a,b| a.task_name.cmp(&b.task_name));
|
||||||
|
|
||||||
// keep counts for all tasks
|
// keep counts for all tasks
|
||||||
|
Loading…
x
Reference in New Issue
Block a user