3 impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
4 pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx> {
5 fn emulate_foreign_item_by_name(
8 args: &[OpTy<'tcx, Tag>],
9 dest: PlaceTy<'tcx, Tag>,
10 ) -> InterpResult<'tcx> {
11 let this = self.eval_context_mut();
15 let errno_place = this.machine.last_error.unwrap();
16 this.write_scalar(errno_place.to_ref().to_scalar()?, dest)?;
21 let result = this.open(args[0], args[1])?;
22 this.write_scalar(Scalar::from_int(result, dest.layout.size), dest)?;
26 let result = this.close(args[0])?;
27 this.write_scalar(Scalar::from_int(result, dest.layout.size), dest)?;
31 let result = this.stat(args[0], args[1])?;
32 this.write_scalar(Scalar::from_int(result, dest.layout.size), dest)?;
36 let result = this.lstat(args[0], args[1])?;
37 this.write_scalar(Scalar::from_int(result, dest.layout.size), dest)?;
41 let result = this.fstat(args[0], args[1])?;
42 this.write_scalar(Scalar::from_int(result, dest.layout.size), dest)?;
46 let result = this.lseek64(args[0], args[1], args[2])?;
47 this.write_scalar(Scalar::from_int(result, dest.layout.size), dest)?;
52 let result = this.gettimeofday(args[0], args[1])?;
53 this.write_scalar(Scalar::from_int(result, dest.layout.size), dest)?;
56 _ => throw_unsup_format!("can't call foreign function: {}", link_name),