pub struct Memory<'tcx, M: Machine<'tcx>> {
pub(super) alloc_map: M::MemoryMap,
extra_fn_ptr_map: FxIndexMap<AllocId, M::ExtraFnVal>,
pub(super) dead_alloc_map: FxIndexMap<AllocId, (Size, Align)>,
validation_in_progress: bool,
}
Fields§
§alloc_map: M::MemoryMap
Allocations local to this instance of the interpreter. The kind
helps ensure that the same mechanism is used for allocation and
deallocation. When an allocation is not found here, it is a
global and looked up in the tcx
for read access. Some machines may
have to mutate this map even on a read-only access to a global (because
they do pointer provenance tracking and the allocations in tcx
have
the wrong type), so we let the machine override this type.
Either way, if the machine allows writing to a global, doing so will
create a copy of the global allocation here.
extra_fn_ptr_map: FxIndexMap<AllocId, M::ExtraFnVal>
Map for “extra” function pointers.
dead_alloc_map: FxIndexMap<AllocId, (Size, Align)>
To be able to compare pointers with null, and to check alignment for accesses to ZSTs (where pointers may dangle), we keep track of the size even for allocations that do not exist any more.
validation_in_progress: bool
This stores whether we are currently doing reads purely for the purpose of validation. Those reads do not trigger the machine’s hooks for memory reads. Needless to say, this must only be set with great care!
Implementations§
Auto Trait Implementations§
impl<'tcx, M> DynSend for Memory<'tcx, M>
impl<'tcx, M> DynSync for Memory<'tcx, M>
impl<'tcx, M> Freeze for Memory<'tcx, M>
impl<'tcx, M> RefUnwindSafe for Memory<'tcx, M>where
<M as Machine<'tcx>>::MemoryMap: RefUnwindSafe,
<M as Machine<'tcx>>::ExtraFnVal: RefUnwindSafe,
impl<'tcx, M> Send for Memory<'tcx, M>
impl<'tcx, M> Sync for Memory<'tcx, M>
impl<'tcx, M> Unpin for Memory<'tcx, M>
impl<'tcx, M> UnwindSafe for Memory<'tcx, M>
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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 moresource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.