diff options
| author | joboet <jonasboettiger@icloud.com> | 2024-08-18 15:08:39 +0200 |
|---|---|---|
| committer | joboet <jonasboettiger@icloud.com> | 2024-09-23 10:36:16 +0200 |
| commit | a21ff017f4f119381088c38e6966ed1022ef40f6 (patch) | |
| tree | ef3c1cc3e92938425a044e5bd23d2c3c7e5639a9 /src/tools/miri | |
| parent | b9d47cfa9b8f0805bfab2c254a02e598a906f102 (diff) | |
| download | rust-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.rs | 10 | ||||
| -rw-r--r-- | src/tools/miri/tests/pass-dep/libc/ccrandomgeneratebytes_apple.rs | 7 |
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); +} |
