#[repr(C)]pub struct _dr_fault_fragment_info_t {
pub tag: *mut c_void,
pub cache_start_pc: *mut byte,
pub is_trace: bool_,
pub app_code_consistent: bool_,
pub ilist: *mut instrlist_t,
}Expand description
Data structure passed within dr_exception_t, dr_siginfo_t, and dr_restore_state_info_t. Contains information about the code fragment inside the code cache at the exception/signal/translation interruption point.
Fields§
§tag: *mut c_voidThe tag of the code fragment inside the code cache at the exception/signal/translation interruption point. NULL for interruption not in the code cache.
cache_start_pc: *mut byteThe start address of the code fragment inside the code cache at the exception/signal/translation interruption point. NULL for interruption not in the code cache (in which case generally only unusual cases of clients changing memory require restoration). Clients are cautioned when examining code cache instructions to not rely on any details of code inserted other than their own.
is_trace: bool_Indicates whether the interrupted code fragment is a trace
app_code_consistent: bool_Indicates whether the original application code containing the code corresponding to the exception/signal/translation interruption point is guaranteed to still be in the same state it was when the code was placed in the code cache. This guarantee varies depending on the type of cache consistency being used by DR.
ilist: *mut instrlist_tThe recreated ilist for this fragment, which contains instrs added by the basic block event(s) with \p translating set to true and also DR’s own mangling of some instrs. This includes client-added metadata in the form of notes and label instrs too. This may be helpful in restoring app state on a fault. When the recreated ilist is not available, this is set to NULL. This may happen when a client returns #DR_EMIT_STORE_TRANSLATIONS, or for DR internal reasons when the app code may not be consistent: for pending deletion or self-modifying fragments. It will also be NULL for non-code-cache cases where \p cache_start_pc is also NULL.
Trait Implementations§
Source§impl Clone for _dr_fault_fragment_info_t
impl Clone for _dr_fault_fragment_info_t
Source§fn clone(&self) -> _dr_fault_fragment_info_t
fn clone(&self) -> _dr_fault_fragment_info_t
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for _dr_fault_fragment_info_t
impl Debug for _dr_fault_fragment_info_t
impl Copy for _dr_fault_fragment_info_t
Auto Trait Implementations§
impl Freeze for _dr_fault_fragment_info_t
impl RefUnwindSafe for _dr_fault_fragment_info_t
impl !Send for _dr_fault_fragment_info_t
impl !Sync for _dr_fault_fragment_info_t
impl Unpin for _dr_fault_fragment_info_t
impl UnsafeUnpin for _dr_fault_fragment_info_t
impl UnwindSafe for _dr_fault_fragment_info_t
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more