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§
source§impl GlobalStateInner
impl GlobalStateInner
pub fn new(config: &MiriConfig, stack_addr: u64) -> Self
source§impl<'mir, 'tcx> GlobalStateInner
impl<'mir, 'tcx> GlobalStateInner
fn alloc_id_from_addr( ecx: &MiriInterpCx<'mir, 'tcx>, addr: u64 ) -> Option<AllocId>
pub fn expose_ptr( ecx: &mut MiriInterpCx<'mir, 'tcx>, alloc_id: AllocId, tag: BorTag ) -> InterpResult<'tcx>
pub fn ptr_from_addr_transmute( _ecx: &MiriInterpCx<'mir, 'tcx>, addr: u64 ) -> Pointer<Option<Provenance>>
pub fn ptr_from_addr_cast( ecx: &MiriInterpCx<'mir, 'tcx>, addr: u64 ) -> InterpResult<'tcx, Pointer<Option<Provenance>>>
fn alloc_base_addr( ecx: &MiriInterpCx<'mir, 'tcx>, alloc_id: AllocId ) -> InterpResult<'tcx, u64>
sourcepub fn rel_ptr_to_addr(
ecx: &MiriInterpCx<'mir, 'tcx>,
ptr: Pointer<AllocId>
) -> InterpResult<'tcx, u64>
pub fn rel_ptr_to_addr( ecx: &MiriInterpCx<'mir, 'tcx>, ptr: Pointer<AllocId> ) -> InterpResult<'tcx, u64>
Convert a relative (tcx) pointer to an absolute address.
sourcepub fn abs_ptr_to_rel(
ecx: &MiriInterpCx<'mir, 'tcx>,
ptr: Pointer<Provenance>
) -> Option<(AllocId, Size)>
pub fn abs_ptr_to_rel( ecx: &MiriInterpCx<'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§
source§impl Clone for GlobalStateInner
impl Clone for GlobalStateInner
source§fn clone(&self) -> GlobalStateInner
fn clone(&self) -> GlobalStateInner
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for GlobalStateInner
impl Debug for GlobalStateInner
source§impl VisitTags for GlobalStateInner
impl VisitTags for GlobalStateInner
Auto Trait Implementations§
impl RefUnwindSafe for GlobalStateInner
impl Send for GlobalStateInner
impl Sync for GlobalStateInner
impl Unpin for GlobalStateInner
impl UnwindSafe for GlobalStateInner
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
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