pick more clear names for the types
This commit is contained in:
parent
9265a6e467
commit
ba95d52258
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
struct LockData {
|
struct MacOsUnfairLock {
|
||||||
id: MutexId,
|
id: MutexId,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,11 +25,11 @@ trait EvalContextExtPriv<'tcx>: crate::MiriInterpCxExt<'tcx> {
|
|||||||
// that's just implicitly creating a new lock at the new location.
|
// that's just implicitly creating a new lock at the new location.
|
||||||
let (alloc, offset, _) = this.ptr_get_alloc_id(lock.ptr(), 0)?;
|
let (alloc, offset, _) = this.ptr_get_alloc_id(lock.ptr(), 0)?;
|
||||||
let (alloc_extra, machine) = this.get_alloc_extra_mut(alloc)?;
|
let (alloc_extra, machine) = this.get_alloc_extra_mut(alloc)?;
|
||||||
if let Some(data) = alloc_extra.get_sync::<LockData>(offset) {
|
if let Some(data) = alloc_extra.get_sync::<MacOsUnfairLock>(offset) {
|
||||||
interp_ok(data.id)
|
interp_ok(data.id)
|
||||||
} else {
|
} else {
|
||||||
let id = machine.sync.mutex_create();
|
let id = machine.sync.mutex_create();
|
||||||
alloc_extra.sync.insert(offset, Box::new(LockData { id }));
|
alloc_extra.sync.insert(offset, Box::new(MacOsUnfairLock { id }));
|
||||||
interp_ok(id)
|
interp_ok(id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,8 +117,7 @@ enum MutexKind {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
/// Additional data that we attach with each mutex instance.
|
struct PthreadMutex {
|
||||||
struct MutexData {
|
|
||||||
id: MutexId,
|
id: MutexId,
|
||||||
kind: MutexKind,
|
kind: MutexKind,
|
||||||
}
|
}
|
||||||
@ -173,10 +172,10 @@ fn mutex_create<'tcx>(
|
|||||||
ecx: &mut MiriInterpCx<'tcx>,
|
ecx: &mut MiriInterpCx<'tcx>,
|
||||||
mutex_ptr: &OpTy<'tcx>,
|
mutex_ptr: &OpTy<'tcx>,
|
||||||
kind: MutexKind,
|
kind: MutexKind,
|
||||||
) -> InterpResult<'tcx, MutexData> {
|
) -> InterpResult<'tcx, PthreadMutex> {
|
||||||
let mutex = ecx.deref_pointer(mutex_ptr)?;
|
let mutex = ecx.deref_pointer(mutex_ptr)?;
|
||||||
let id = ecx.machine.sync.mutex_create();
|
let id = ecx.machine.sync.mutex_create();
|
||||||
let data = MutexData { id, kind };
|
let data = PthreadMutex { id, kind };
|
||||||
lazy_sync_init(ecx, &mutex, mutex_init_offset(ecx)?, data)?;
|
lazy_sync_init(ecx, &mutex, mutex_init_offset(ecx)?, data)?;
|
||||||
interp_ok(data)
|
interp_ok(data)
|
||||||
}
|
}
|
||||||
@ -188,12 +187,12 @@ fn mutex_create<'tcx>(
|
|||||||
fn mutex_get_data<'tcx, 'a>(
|
fn mutex_get_data<'tcx, 'a>(
|
||||||
ecx: &'a mut MiriInterpCx<'tcx>,
|
ecx: &'a mut MiriInterpCx<'tcx>,
|
||||||
mutex_ptr: &OpTy<'tcx>,
|
mutex_ptr: &OpTy<'tcx>,
|
||||||
) -> InterpResult<'tcx, MutexData> {
|
) -> InterpResult<'tcx, PthreadMutex> {
|
||||||
let mutex = ecx.deref_pointer(mutex_ptr)?;
|
let mutex = ecx.deref_pointer(mutex_ptr)?;
|
||||||
lazy_sync_get_data(ecx, &mutex, mutex_init_offset(ecx)?, "pthread_mutex_t", |ecx| {
|
lazy_sync_get_data(ecx, &mutex, mutex_init_offset(ecx)?, "pthread_mutex_t", |ecx| {
|
||||||
let kind = mutex_kind_from_static_initializer(ecx, &mutex)?;
|
let kind = mutex_kind_from_static_initializer(ecx, &mutex)?;
|
||||||
let id = ecx.machine.sync.mutex_create();
|
let id = ecx.machine.sync.mutex_create();
|
||||||
interp_ok(MutexData { id, kind })
|
interp_ok(PthreadMutex { id, kind })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,8 +227,7 @@ fn mutex_kind_from_static_initializer<'tcx>(
|
|||||||
// - init: u32
|
// - init: u32
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
/// Additional data that we attach with each rwlock instance.
|
struct PthreadRwLock {
|
||||||
struct RwLockData {
|
|
||||||
id: RwLockId,
|
id: RwLockId,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +259,7 @@ fn rwlock_init_offset<'tcx>(ecx: &MiriInterpCx<'tcx>) -> InterpResult<'tcx, Size
|
|||||||
fn rwlock_get_data<'tcx>(
|
fn rwlock_get_data<'tcx>(
|
||||||
ecx: &mut MiriInterpCx<'tcx>,
|
ecx: &mut MiriInterpCx<'tcx>,
|
||||||
rwlock_ptr: &OpTy<'tcx>,
|
rwlock_ptr: &OpTy<'tcx>,
|
||||||
) -> InterpResult<'tcx, RwLockData> {
|
) -> InterpResult<'tcx, PthreadRwLock> {
|
||||||
let rwlock = ecx.deref_pointer(rwlock_ptr)?;
|
let rwlock = ecx.deref_pointer(rwlock_ptr)?;
|
||||||
lazy_sync_get_data(ecx, &rwlock, rwlock_init_offset(ecx)?, "pthread_rwlock_t", |ecx| {
|
lazy_sync_get_data(ecx, &rwlock, rwlock_init_offset(ecx)?, "pthread_rwlock_t", |ecx| {
|
||||||
if !bytewise_equal_atomic_relaxed(
|
if !bytewise_equal_atomic_relaxed(
|
||||||
@ -272,7 +270,7 @@ fn rwlock_get_data<'tcx>(
|
|||||||
throw_unsup_format!("unsupported static initializer used for `pthread_rwlock_t`");
|
throw_unsup_format!("unsupported static initializer used for `pthread_rwlock_t`");
|
||||||
}
|
}
|
||||||
let id = ecx.machine.sync.rwlock_create();
|
let id = ecx.machine.sync.rwlock_create();
|
||||||
interp_ok(RwLockData { id })
|
interp_ok(PthreadRwLock { id })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -366,8 +364,7 @@ enum ClockId {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
/// Additional data that we attach with each cond instance.
|
struct PthreadCondvar {
|
||||||
struct CondData {
|
|
||||||
id: CondvarId,
|
id: CondvarId,
|
||||||
clock: ClockId,
|
clock: ClockId,
|
||||||
}
|
}
|
||||||
@ -376,10 +373,10 @@ fn cond_create<'tcx>(
|
|||||||
ecx: &mut MiriInterpCx<'tcx>,
|
ecx: &mut MiriInterpCx<'tcx>,
|
||||||
cond_ptr: &OpTy<'tcx>,
|
cond_ptr: &OpTy<'tcx>,
|
||||||
clock: ClockId,
|
clock: ClockId,
|
||||||
) -> InterpResult<'tcx, CondData> {
|
) -> InterpResult<'tcx, PthreadCondvar> {
|
||||||
let cond = ecx.deref_pointer(cond_ptr)?;
|
let cond = ecx.deref_pointer(cond_ptr)?;
|
||||||
let id = ecx.machine.sync.condvar_create();
|
let id = ecx.machine.sync.condvar_create();
|
||||||
let data = CondData { id, clock };
|
let data = PthreadCondvar { id, clock };
|
||||||
lazy_sync_init(ecx, &cond, cond_init_offset(ecx)?, data)?;
|
lazy_sync_init(ecx, &cond, cond_init_offset(ecx)?, data)?;
|
||||||
interp_ok(data)
|
interp_ok(data)
|
||||||
}
|
}
|
||||||
@ -387,7 +384,7 @@ fn cond_create<'tcx>(
|
|||||||
fn cond_get_data<'tcx>(
|
fn cond_get_data<'tcx>(
|
||||||
ecx: &mut MiriInterpCx<'tcx>,
|
ecx: &mut MiriInterpCx<'tcx>,
|
||||||
cond_ptr: &OpTy<'tcx>,
|
cond_ptr: &OpTy<'tcx>,
|
||||||
) -> InterpResult<'tcx, CondData> {
|
) -> InterpResult<'tcx, PthreadCondvar> {
|
||||||
let cond = ecx.deref_pointer(cond_ptr)?;
|
let cond = ecx.deref_pointer(cond_ptr)?;
|
||||||
lazy_sync_get_data(ecx, &cond, cond_init_offset(ecx)?, "pthread_cond_t", |ecx| {
|
lazy_sync_get_data(ecx, &cond, cond_init_offset(ecx)?, "pthread_cond_t", |ecx| {
|
||||||
if !bytewise_equal_atomic_relaxed(
|
if !bytewise_equal_atomic_relaxed(
|
||||||
@ -399,7 +396,7 @@ fn cond_get_data<'tcx>(
|
|||||||
}
|
}
|
||||||
// This used the static initializer. The clock there is always CLOCK_REALTIME.
|
// This used the static initializer. The clock there is always CLOCK_REALTIME.
|
||||||
let id = ecx.machine.sync.condvar_create();
|
let id = ecx.machine.sync.condvar_create();
|
||||||
interp_ok(CondData { id, clock: ClockId::Realtime })
|
interp_ok(PthreadCondvar { id, clock: ClockId::Realtime })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ use crate::concurrency::sync::lazy_sync_get_data;
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
struct InitOnceData {
|
struct WindowsInitOnce {
|
||||||
id: InitOnceId,
|
id: InitOnceId,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ trait EvalContextExtPriv<'tcx>: crate::MiriInterpCxExt<'tcx> {
|
|||||||
fn init_once_get_data(
|
fn init_once_get_data(
|
||||||
&mut self,
|
&mut self,
|
||||||
init_once_ptr: &OpTy<'tcx>,
|
init_once_ptr: &OpTy<'tcx>,
|
||||||
) -> InterpResult<'tcx, InitOnceData> {
|
) -> InterpResult<'tcx, WindowsInitOnce> {
|
||||||
let this = self.eval_context_mut();
|
let this = self.eval_context_mut();
|
||||||
|
|
||||||
let init_once = this.deref_pointer(init_once_ptr)?;
|
let init_once = this.deref_pointer(init_once_ptr)?;
|
||||||
@ -28,7 +28,7 @@ trait EvalContextExtPriv<'tcx>: crate::MiriInterpCxExt<'tcx> {
|
|||||||
lazy_sync_get_data(this, &init_once, init_offset, "INIT_ONCE", |this| {
|
lazy_sync_get_data(this, &init_once, init_offset, "INIT_ONCE", |this| {
|
||||||
// TODO: check that this is still all-zero.
|
// TODO: check that this is still all-zero.
|
||||||
let id = this.machine.sync.init_once_create();
|
let id = this.machine.sync.init_once_create();
|
||||||
interp_ok(InitOnceData { id })
|
interp_ok(WindowsInitOnce { id })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user