//! Support for reverse debugging targets. use crate::target::Target; /// Target Extension - Reverse continue for targets. pub trait ReverseCont: Target where Tid: crate::is_valid_tid::IsValidTid, { /// [Reverse continue] the target. /// /// Reverse continue allows the target to run backwards until it reaches the /// end of the replay log. /// /// [Reverse continue]: https://sourceware.org/gdb/current/onlinedocs/gdb/Reverse-Execution.html fn reverse_cont(&mut self) -> Result<(), Self::Error>; } /// See [`ReverseCont`] pub type ReverseContOps<'a, Tid, T> = &'a mut dyn ReverseCont::Arch, Error = ::Error>; /// Target Extension - Reverse stepping for targets. pub trait ReverseStep: Target where Tid: crate::is_valid_tid::IsValidTid, { /// [Reverse step] the specified `Tid`. /// /// On single threaded targets, `tid` is set to `()` and can be ignored. /// /// Reverse stepping allows the target to run backwards by one "step" - /// typically a single instruction. /// /// [Reverse step]: https://sourceware.org/gdb/current/onlinedocs/gdb/Reverse-Execution.html fn reverse_step(&mut self, tid: Tid) -> Result<(), Self::Error>; } /// See [`ReverseStep`] pub type ReverseStepOps<'a, Tid, T> = &'a mut dyn ReverseStep::Arch, Error = ::Error>; /// Describes the point reached in a replay log (used alongside /// [`BaseStopReason::ReplayLog`](crate::stub::BaseStopReason::ReplayLog)) #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum ReplayLogPosition { /// Reached the beginning of the replay log. Begin, /// Reached the end of the replay log. End, }