Skip to content

Commit a479ed6

Browse files
committed
Auto merge of #3564 - RalfJung:pthread-sync, r=RalfJung
pthread shims: reorganize field offset handling, and add sanity checks
2 parents fd8f9a6 + e5597b2 commit a479ed6

File tree

6 files changed

+235
-195
lines changed

6 files changed

+235
-195
lines changed

src/tools/miri/src/helpers.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,14 +255,19 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
255255
}
256256

257257
/// Evaluates the scalar at the specified path.
258-
fn eval_path_scalar(&self, path: &[&str]) -> Scalar<Provenance> {
258+
fn eval_path(&self, path: &[&str]) -> OpTy<'tcx, Provenance> {
259259
let this = self.eval_context_ref();
260260
let instance = this.resolve_path(path, Namespace::ValueNS);
261261
// We don't give a span -- this isn't actually used directly by the program anyway.
262262
let const_val = this.eval_global(instance).unwrap_or_else(|err| {
263263
panic!("failed to evaluate required Rust item: {path:?}\n{err:?}")
264264
});
265-
this.read_scalar(&const_val)
265+
const_val.into()
266+
}
267+
fn eval_path_scalar(&self, path: &[&str]) -> Scalar<Provenance> {
268+
let this = self.eval_context_ref();
269+
let val = this.eval_path(path);
270+
this.read_scalar(&val)
266271
.unwrap_or_else(|err| panic!("failed to read required Rust item: {path:?}\n{err:?}"))
267272
}
268273

src/tools/miri/src/shims/unix/foreign_items.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,18 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
490490
let result = this.pthread_condattr_init(attr)?;
491491
this.write_scalar(Scalar::from_i32(result), dest)?;
492492
}
493+
"pthread_condattr_setclock" => {
494+
let [attr, clock_id] =
495+
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
496+
let result = this.pthread_condattr_setclock(attr, clock_id)?;
497+
this.write_scalar(result, dest)?;
498+
}
499+
"pthread_condattr_getclock" => {
500+
let [attr, clock_id] =
501+
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
502+
let result = this.pthread_condattr_getclock(attr, clock_id)?;
503+
this.write_scalar(result, dest)?;
504+
}
493505
"pthread_condattr_destroy" => {
494506
let [attr] = this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
495507
let result = this.pthread_condattr_destroy(attr)?;

src/tools/miri/src/shims/unix/linux/foreign_items.rs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
7373
}
7474

7575
// Threading
76-
"pthread_condattr_setclock" => {
77-
let [attr, clock_id] =
78-
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
79-
let result = this.pthread_condattr_setclock(attr, clock_id)?;
80-
this.write_scalar(result, dest)?;
81-
}
82-
"pthread_condattr_getclock" => {
83-
let [attr, clock_id] =
84-
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
85-
let result = this.pthread_condattr_getclock(attr, clock_id)?;
86-
this.write_scalar(result, dest)?;
87-
}
8876
"pthread_setname_np" => {
8977
let [thread, name] =
9078
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;

src/tools/miri/src/shims/unix/solarish/foreign_items.rs

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use rustc_span::Symbol;
22
use rustc_target::spec::abi::Abi;
33

4-
use crate::shims::unix::*;
54
use crate::*;
65
use shims::EmulateItemResult;
76

@@ -11,6 +10,7 @@ pub fn is_dyn_sym(_name: &str) -> bool {
1110

1211
impl<'mir, 'tcx: 'mir> EvalContextExt<'mir, 'tcx> for crate::MiriInterpCx<'mir, 'tcx> {}
1312
pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
13+
#[allow(warnings)]
1414
fn emulate_foreign_item_inner(
1515
&mut self,
1616
link_name: Symbol,
@@ -20,20 +20,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
2020
) -> InterpResult<'tcx, EmulateItemResult> {
2121
let this = self.eval_context_mut();
2222
match link_name.as_str() {
23-
// Threading
24-
"pthread_condattr_setclock" => {
25-
let [attr, clock_id] =
26-
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
27-
let result = this.pthread_condattr_setclock(attr, clock_id)?;
28-
this.write_scalar(result, dest)?;
29-
}
30-
"pthread_condattr_getclock" => {
31-
let [attr, clock_id] =
32-
this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
33-
let result = this.pthread_condattr_getclock(attr, clock_id)?;
34-
this.write_scalar(result, dest)?;
35-
}
36-
3723
_ => return Ok(EmulateItemResult::NotSupported),
3824
}
3925
Ok(EmulateItemResult::NeedsJumping)

0 commit comments

Comments
 (0)