diff --git a/src/shims/foreign_items/posix.rs b/src/shims/foreign_items/posix.rs index db2fab526c1..1652a3a1b54 100644 --- a/src/shims/foreign_items/posix.rs +++ b/src/shims/foreign_items/posix.rs @@ -335,16 +335,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx let result = this.pthread_condattr_init(attr)?; this.write_scalar(Scalar::from_i32(result), dest)?; } - "pthread_condattr_setclock" => { - let &[attr, clock_id] = check_arg_count(args)?; - let result = this.pthread_condattr_setclock(attr, clock_id)?; - this.write_scalar(Scalar::from_i32(result), dest)?; - } - "pthread_condattr_getclock" => { - let &[attr, clock_id] = check_arg_count(args)?; - let result = this.pthread_condattr_getclock(attr, clock_id)?; - this.write_scalar(Scalar::from_i32(result), dest)?; - } "pthread_condattr_destroy" => { let &[attr] = check_arg_count(args)?; let result = this.pthread_condattr_destroy(attr)?; diff --git a/src/shims/foreign_items/posix/linux.rs b/src/shims/foreign_items/posix/linux.rs index e0f54cac157..323418f39ba 100644 --- a/src/shims/foreign_items/posix/linux.rs +++ b/src/shims/foreign_items/posix/linux.rs @@ -90,6 +90,16 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx let result = this.prctl(option, arg2, arg3, arg4, arg5)?; this.write_scalar(Scalar::from_i32(result), dest)?; } + "pthread_condattr_setclock" => { + let &[attr, clock_id] = check_arg_count(args)?; + let result = this.pthread_condattr_setclock(attr, clock_id)?; + this.write_scalar(Scalar::from_i32(result), dest)?; + } + "pthread_condattr_getclock" => { + let &[attr, clock_id] = check_arg_count(args)?; + let result = this.pthread_condattr_getclock(attr, clock_id)?; + this.write_scalar(Scalar::from_i32(result), dest)?; + } // Dynamically invoked syscalls "syscall" => { diff --git a/src/sync.rs b/src/sync.rs index 026542926ed..107ad5ace17 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -238,6 +238,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx match this.machine.threads.sync.rwlocks[id].readers.entry(reader) { Entry::Occupied(mut entry) => { let count = entry.get_mut(); + assert!(*count > 0, "rwlock locked with count == 0"); *count -= 1; if *count == 0 { entry.remove();