Skip to main content

_dr_fault_fragment_info_t

Struct _dr_fault_fragment_info_t 

Source
#[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_void

The 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 byte

The 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_t

The 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

Source§

fn clone(&self) -> _dr_fault_fragment_info_t

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for _dr_fault_fragment_info_t

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Copy for _dr_fault_fragment_info_t

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V