#[ensures(effects!(old(trace), trace, effect!(FdAccess), effect!(ReadMem, addr, count)))]
(
ctx: &mut VmCtx,
fd: HostFd,
ptr: SboxPtr,
cnt: usize,
flags: i32,
)
| 585 | #[ensures(trace_safe(trace, ctx))] |
| 586 | // #[ensures(effects!(old(trace), trace, effect!(FdAccess), effect!(ReadMem, addr, count)))] |
| 587 | pub fn trace_send( |
| 588 | ctx: &mut VmCtx, |
| 589 | fd: HostFd, |
| 590 | ptr: SboxPtr, |
| 591 | cnt: usize, |
| 592 | flags: i32, |
| 593 | ) -> RuntimeResult<usize> { |
| 594 | let slice = ctx.slice_mem_mut(ptr, cnt as u32); |
| 595 | let os_fd: usize = fd.to_raw(); |
| 596 | let r = os_sendto(os_fd, slice, cnt, flags, 0, 0); |
| 597 | RuntimeError::from_syscall_ret(r) |
| 598 | } |
| 599 | |
| 600 | #[with_ghost_var(trace: &mut Trace)] |
| 601 | #[requires(ctx_safe(ctx))] |
no test coverage detected