From 5ffac514ca449f0631bcb597eb9e220c27d45bb1 Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Fri, 27 Sep 2024 15:24:06 +0200 Subject: [PATCH] rework release detection with nested interrupts --- fuzzers/FRET/Cargo.toml | 2 +- fuzzers/FRET/src/lib.rs | 2 +- fuzzers/FRET/src/systemstate/mod.rs | 8 +++++ fuzzers/FRET/src/systemstate/observers.rs | 44 ++++++++++++++++------- 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/fuzzers/FRET/Cargo.toml b/fuzzers/FRET/Cargo.toml index 852c329f8d..1ead64566c 100644 --- a/fuzzers/FRET/Cargo.toml +++ b/fuzzers/FRET/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Alwin Berger "] edition = "2021" [features] -default = ["std", "snapshot_restore", "snapshot_fast", "singlecore", "restarting", "do_hash_notify_state", "config_stg", "fuzz_int", "trace_job_response_times", "shortcut" ] +default = ["std", "snapshot_fast", "restarting", "do_hash_notify_state", "config_stg", "fuzz_int", "trace_job_response_times", "shortcut" ] std = [] # Exec environemnt basics snapshot_restore = [] diff --git a/fuzzers/FRET/src/lib.rs b/fuzzers/FRET/src/lib.rs index b897b6cf28..cd494a25ca 100644 --- a/fuzzers/FRET/src/lib.rs +++ b/fuzzers/FRET/src/lib.rs @@ -1,7 +1,7 @@ #[cfg(target_os = "linux")] mod fuzzer; #[cfg(target_os = "linux")] -mod time; +pub mod time; #[cfg(target_os = "linux")] pub mod systemstate; #[cfg(target_os = "linux")] diff --git a/fuzzers/FRET/src/systemstate/mod.rs b/fuzzers/FRET/src/systemstate/mod.rs index 6d3c4e0417..18b341662c 100644 --- a/fuzzers/FRET/src/systemstate/mod.rs +++ b/fuzzers/FRET/src/systemstate/mod.rs @@ -171,6 +171,14 @@ impl ReducedFreeRTOSSystemState { } } +impl fmt::Display for ReducedFreeRTOSSystemState { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let ready = self.ready_list_after.iter().map(|x| x.task_name.clone()).collect::>().join(" "); + let delay = self.delay_list_after.iter().map(|x| x.task_name.clone()).collect::>().join(" "); + write!(f, "Valid: {} | Current: {} | Ready: {} | Delay: {}", u32::from(!self.read_invalid), self.current_task.task_name, ready, delay) + } +} + // #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq, Hash)] // pub enum ExecLevel { // APP = 0, diff --git a/fuzzers/FRET/src/systemstate/observers.rs b/fuzzers/FRET/src/systemstate/observers.rs index 1ce1f552f4..422452e7ba 100644 --- a/fuzzers/FRET/src/systemstate/observers.rs +++ b/fuzzers/FRET/src/systemstate/observers.rs @@ -235,7 +235,7 @@ fn get_releases(trace: &Vec, states: &HashMap, states: &HashMap isr -> userspace if i.end_capture.0 == CaptureEvent::ISREnd { let start_state = states.get(&i.start_state).expect("State not found"); let end_state = states.get(&i.end_state).expect("State not found"); @@ -281,18 +282,37 @@ fn get_releases(trace: &Vec, states: &HashMap