Struct miri::intptrcast::GlobalStateInner
source · [−]pub struct GlobalStateInner {
int_to_ptr_map: Vec<(u64, AllocId)>,
base_addr: FxHashMap<AllocId, u64>,
exposed: FxHashSet<AllocId>,
next_base_addr: u64,
provenance_mode: ProvenanceMode,
}
Fields
int_to_ptr_map: Vec<(u64, AllocId)>
This is used as a map between the address of each allocation and its AllocId
.
It is always sorted
base_addr: FxHashMap<AllocId, u64>
The base address for each allocation. We cannot put that into
AllocExtra
because function pointers also have a base address, and
they do not have an AllocExtra
.
This is the inverse of int_to_ptr_map
.
exposed: FxHashSet<AllocId>
Whether an allocation has been exposed or not. This cannot be put
into AllocExtra
for the same reason as base_addr
.
next_base_addr: u64
This is used as a memory address when a new pointer is casted to an integer. It is always larger than any address that was previously made part of a block.
provenance_mode: ProvenanceMode
The provenance to use for int2ptr casts
Implementations
sourceimpl GlobalStateInner
impl GlobalStateInner
pub fn new(config: &MiriConfig) -> Self
sourceimpl<'mir, 'tcx> GlobalStateInner
impl<'mir, 'tcx> GlobalStateInner
fn alloc_id_from_addr(
ecx: &MiriEvalContext<'mir, 'tcx>,
addr: u64
) -> Option<AllocId>
pub fn expose_ptr(
ecx: &mut MiriEvalContext<'mir, 'tcx>,
alloc_id: AllocId,
sb: SbTag
) -> InterpResult<'tcx>
pub fn ptr_from_addr_transmute(
_ecx: &MiriEvalContext<'mir, 'tcx>,
addr: u64
) -> Pointer<Option<Provenance>>
pub fn ptr_from_addr_cast(
ecx: &MiriEvalContext<'mir, 'tcx>,
addr: u64
) -> InterpResult<'tcx, Pointer<Option<Provenance>>>
fn alloc_base_addr(ecx: &MiriEvalContext<'mir, 'tcx>, alloc_id: AllocId) -> u64
sourcepub fn rel_ptr_to_addr(
ecx: &MiriEvalContext<'mir, 'tcx>,
ptr: Pointer<AllocId>
) -> u64
pub fn rel_ptr_to_addr(
ecx: &MiriEvalContext<'mir, 'tcx>,
ptr: Pointer<AllocId>
) -> u64
Convert a relative (tcx) pointer to an absolute address.
sourcepub fn abs_ptr_to_rel(
ecx: &MiriEvalContext<'mir, 'tcx>,
ptr: Pointer<Provenance>
) -> Option<(AllocId, Size)>
pub fn abs_ptr_to_rel(
ecx: &MiriEvalContext<'mir, 'tcx>,
ptr: Pointer<Provenance>
) -> Option<(AllocId, Size)>
When a pointer is used for a memory access, this computes where in which allocation the access is going.
sourcefn align_addr(addr: u64, align: u64) -> u64
fn align_addr(addr: u64, align: u64) -> u64
Shifts addr
to make it aligned with align
by rounding addr
to the smallest multiple
of align
that is larger or equal to addr
Trait Implementations
sourceimpl Clone for GlobalStateInner
impl Clone for GlobalStateInner
sourcefn clone(&self) -> GlobalStateInner
fn clone(&self) -> GlobalStateInner
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations
impl RefUnwindSafe for GlobalStateInner
impl Send for GlobalStateInner
impl Sync for GlobalStateInner
impl Unpin for GlobalStateInner
impl UnwindSafe for GlobalStateInner
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<V, T> VZip<V> for Twhere
V: MultiLane<T>,
impl<V, T> VZip<V> for Twhere
V: MultiLane<T>,
fn vzip(self) -> V
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 104 bytes