diff --git a/src/shims/unix/foreign_items.rs b/src/shims/unix/foreign_items.rs index d789b0c640..4993690767 100644 --- a/src/shims/unix/foreign_items.rs +++ b/src/shims/unix/foreign_items.rs @@ -461,6 +461,28 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx this.write_null(dest)?; } + // Querying system information + "pthread_attr_getstack" => { + // We don't support "pthread_attr_setstack", so we just pretend all stacks have the same values here. + let [attr_place, addr_place, size_place] = + this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?; + this.deref_operand(attr_place)?; + let addr_place = this.deref_operand(addr_place)?; + let size_place = this.deref_operand(size_place)?; + + this.write_scalar( + Scalar::from_uint(STACK_ADDR, this.pointer_size()), + &addr_place.into(), + )?; + this.write_scalar( + Scalar::from_uint(STACK_SIZE, this.pointer_size()), + &size_place.into(), + )?; + + // Return success (`0`). + this.write_null(dest)?; + } + | "signal" | "sigaltstack" if this.frame_in_std() => { diff --git a/src/shims/unix/freebsd/foreign_items.rs b/src/shims/unix/freebsd/foreign_items.rs index b1d0eed2c0..cad1192337 100644 --- a/src/shims/unix/freebsd/foreign_items.rs +++ b/src/shims/unix/freebsd/foreign_items.rs @@ -18,28 +18,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx ) -> InterpResult<'tcx, EmulateByNameResult<'mir, 'tcx>> { let this = self.eval_context_mut(); match link_name.as_str() { - // Querying system information - "pthread_attr_getstack" => { - // We don't support "pthread_attr_setstack", so we just pretend all stacks have the same values here. - let [attr_place, addr_place, size_place] = - this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?; - this.deref_operand(attr_place)?; - let addr_place = this.deref_operand(addr_place)?; - let size_place = this.deref_operand(size_place)?; - - this.write_scalar( - Scalar::from_uint(STACK_ADDR, this.pointer_size()), - &addr_place.into(), - )?; - this.write_scalar( - Scalar::from_uint(STACK_SIZE, this.pointer_size()), - &size_place.into(), - )?; - - // Return success (`0`). - this.write_null(dest)?; - } - // Linux's `pthread_getattr_np` equivalent "pthread_attr_get_np" if this.frame_in_std() => { let [_thread, _attr] = diff --git a/src/shims/unix/linux/foreign_items.rs b/src/shims/unix/linux/foreign_items.rs index ab3f39147c..500250745c 100644 --- a/src/shims/unix/linux/foreign_items.rs +++ b/src/shims/unix/linux/foreign_items.rs @@ -80,27 +80,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx this.write_scalar(Scalar::from_i32(result), dest)?; } - // Querying system information - "pthread_attr_getstack" => { - // We don't support "pthread_attr_setstack", so we just pretend all stacks have the same values here. - let [attr_place, addr_place, size_place] = - this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?; - this.deref_operand(attr_place)?; - let addr_place = this.deref_operand(addr_place)?; - let size_place = this.deref_operand(size_place)?; - - this.write_scalar( - Scalar::from_uint(STACK_ADDR, this.pointer_size()), - &addr_place.into(), - )?; - this.write_scalar( - Scalar::from_uint(STACK_SIZE, this.pointer_size()), - &size_place.into(), - )?; - - // Return success (`0`). - this.write_null(dest)?; - } + // Threading "prctl" => {