Skip to content

Commit 7d4e2b9

Browse files
authored
Merge pull request #4634 from nia-e/new-libffi
native-lib: bump libffi
2 parents 007d6e5 + 407732d commit 7d4e2b9

File tree

3 files changed

+7
-21
lines changed

3 files changed

+7
-21
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ features = ['unprefixed_malloc_on_supported_platforms']
3939
[target.'cfg(unix)'.dependencies]
4040
libc = "0.2"
4141
# native-lib dependencies
42-
libffi = { version = "4.1.1", optional = true }
42+
libffi = { version = "5.0.0", optional = true }
4343
libloading = { version = "0.8", optional = true }
4444
serde = { version = "1.0.219", features = ["derive"], optional = true }
4545

src/shims/native_lib/ffi.rs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@ use libffi::middle::{Arg as ArgPtr, Cif, Type as FfiType};
99
///
1010
/// The safety invariants of the foreign function being called must be upheld (if any).
1111
pub unsafe fn call<R: libffi::high::CType>(fun: CodePtr, args: &mut [OwnedArg]) -> R {
12-
let arg_ptrs: Vec<_> = args.iter().map(|arg| arg.ptr()).collect();
1312
let cif = Cif::new(args.iter_mut().map(|arg| arg.ty.take().unwrap()), R::reify().into_middle());
14-
// SAFETY: Caller upholds that the function is safe to call, and since we
15-
// were passed a slice reference we know the `OwnedArg`s won't have been
16-
// dropped by this point.
13+
let arg_ptrs: Vec<_> = args.iter().map(|arg| ArgPtr::new(&*arg.bytes)).collect();
14+
// SAFETY: Caller upholds that the function is safe to call.
1715
unsafe { cif.call(fun, &arg_ptrs) }
1816
}
1917

@@ -31,16 +29,4 @@ impl OwnedArg {
3129
pub fn new(ty: FfiType, bytes: Box<[u8]>) -> Self {
3230
Self { ty: Some(ty), bytes }
3331
}
34-
35-
/// Creates a libffi argument pointer pointing to this argument's bytes.
36-
/// NB: Since `libffi::middle::Arg` ignores the lifetime of the reference
37-
/// it's derived from, it is up to the caller to ensure the `OwnedArg` is
38-
/// not dropped before unsafely calling `libffi::middle::Cif::call()`!
39-
fn ptr(&self) -> ArgPtr {
40-
// FIXME: Using `&self.bytes[0]` to reference the whole array is
41-
// definitely unsound under SB, but we're waiting on
42-
// https://github.com/libffi-rs/libffi-rs/commit/112a37b3b6ffb35bd75241fbcc580de40ba74a73
43-
// to land in a release so that we don't need to do this.
44-
ArgPtr::new(&self.bytes[0])
45-
}
4632
}

0 commit comments

Comments
 (0)