about summary refs log tree commit diff
path: root/src/tools/miri
diff options
context:
space:
mode:
authorjoboet <jonasboettiger@icloud.com>2024-08-18 15:08:39 +0200
committerjoboet <jonasboettiger@icloud.com>2024-09-23 10:36:16 +0200
commita21ff017f4f119381088c38e6966ed1022ef40f6 (patch)
treeef3c1cc3e92938425a044e5bd23d2c3c7e5639a9 /src/tools/miri
parentb9d47cfa9b8f0805bfab2c254a02e598a906f102 (diff)
downloadrust-a21ff017f4f119381088c38e6966ed1022ef40f6.tar.gz
rust-a21ff017f4f119381088c38e6966ed1022ef40f6.zip
miri: shim `CCRandomGenerateBytes`
Diffstat (limited to 'src/tools/miri')
-rw-r--r--src/tools/miri/src/shims/unix/macos/foreign_items.rs10
-rw-r--r--src/tools/miri/tests/pass-dep/libc/ccrandomgeneratebytes_apple.rs7
2 files changed, 17 insertions, 0 deletions
diff --git a/src/tools/miri/src/shims/unix/macos/foreign_items.rs b/src/tools/miri/src/shims/unix/macos/foreign_items.rs
index 47b887dec94..95a41752059 100644
--- a/src/tools/miri/src/shims/unix/macos/foreign_items.rs
+++ b/src/tools/miri/src/shims/unix/macos/foreign_items.rs
@@ -78,6 +78,16 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
                 this.write_pointer(environ, dest)?;
             }
 
+            // Random data generation
+            "CCRandomGenerateBytes" => {
+                let [bytes, count] = this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
+                let bytes = this.read_pointer(bytes)?;
+                let count = this.read_target_usize(count)?;
+                let success = this.eval_libc_i32("kCCSuccess");
+                this.gen_random(bytes, count)?;
+                this.write_int(success, dest)?;
+            }
+
             // Time related shims
             "mach_absolute_time" => {
                 let [] = this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?;
diff --git a/src/tools/miri/tests/pass-dep/libc/ccrandomgeneratebytes_apple.rs b/src/tools/miri/tests/pass-dep/libc/ccrandomgeneratebytes_apple.rs
new file mode 100644
index 00000000000..d06e8622ee8
--- /dev/null
+++ b/src/tools/miri/tests/pass-dep/libc/ccrandomgeneratebytes_apple.rs
@@ -0,0 +1,7 @@
+//@only-target-apple: this directly tests apple-only functions
+
+fn main() {
+    let mut bytes = [0u8; 24];
+    let ret = unsafe { libc::CCRandomGenerateBytes(bytes.as_mut_ptr().cast(), bytes.len()) };
+    assert_eq!(ret, libc::kCCSuccess);
+}