From e6ec64378136653a75b7b5ebbcf3034623c98050 Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Wed, 6 Nov 2024 12:51:39 +0100 Subject: [PATCH] fix release-detection for api -> isr -> app, fix crash on empty trace --- fuzzers/FRET/src/systemstate/observers.rs | 11 +++++++---- fuzzers/FRET/src/systemstate/stg.rs | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/fuzzers/FRET/src/systemstate/observers.rs b/fuzzers/FRET/src/systemstate/observers.rs index bee3bfbab9..ccb110d541 100644 --- a/fuzzers/FRET/src/systemstate/observers.rs +++ b/fuzzers/FRET/src/systemstate/observers.rs @@ -341,19 +341,22 @@ fn get_releases(trace: &Vec, states: &HashMap _n && trace[n].level == 0 { // API Start -> ISR Start+End -> APP Continue + end_index = n-1; // any return to a regular app block is a fair point of comparison for the ready list, because scheduling has been performed + break; } }; states.get(&trace[end_index].end_state).expect("State not found") }; - api_end.ready_list_after.iter().for_each(|x| { - if x.task_name != api_start.current_task.task_name && !api_start.ready_list_after.iter().any(|y| x.task_name == y.task_name) { + api_end_state.ready_list_after.iter().for_each(|x| { + if x.task_name != api_start_state.current_task.task_name && !api_start_state.ready_list_after.iter().any(|y| x.task_name == y.task_name) { ret.push((i.end_tick, x.task_name.clone())); // eprintln!("Task {} released by API call at {:.1}ms", x.task_name, crate::time::clock::tick_to_time(i.end_tick).as_micros() as f32/1000.0); } diff --git a/fuzzers/FRET/src/systemstate/stg.rs b/fuzzers/FRET/src/systemstate/stg.rs index 77185d4a94..d876aa13f1 100644 --- a/fuzzers/FRET/src/systemstate/stg.rs +++ b/fuzzers/FRET/src/systemstate/stg.rs @@ -443,6 +443,9 @@ impl StgFeedback { let mut return_edge_trace = vec![]; let mut interesting = false; let mut updated = false; + if trace.is_empty() { + return (return_node_trace, return_edge_trace, interesting, updated); + } let mut instance_time = execinterval_to_abb_instances(trace, read_trace); // add all missing state+abb combinations to the graph for (_i,interval) in trace.iter().enumerate() { // Iterate intervals