diff --git a/Cargo.lock b/Cargo.lock index 76844c0d328..f8a6a48b044 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -112,7 +112,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -266,7 +266,7 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1788,7 +1788,7 @@ dependencies = [ "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum cmake 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "3c84c596dcf125d6781f58e3f4254677ec2a6d8aa56e8501ac277100990b3229" "checksum colored 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6cdb90b60f2927f8d76139c72dbde7e10c3a2bc47c8594c9c7a66529f2687c03" -"checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" +"checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120" "checksum cranelift-bforest 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "409f92af3dd276e112b72873a3ef02613e3c5f55b81d5d5d04f3157d4f8b8c54" "checksum cranelift-codegen 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b303542a56fba4cbaeea099fb30ed078b50de0e765fd69f7f5f410adbe31d95b" "checksum cranelift-codegen-meta 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0fee15ed430092a6d14b7c6d627540bef732509b8097ae31e4e35526edaa129c" diff --git a/lib/clif-backend/Cargo.toml b/lib/clif-backend/Cargo.toml index c30591f477d..20e72463a90 100644 --- a/lib/clif-backend/Cargo.toml +++ b/lib/clif-backend/Cargo.toml @@ -24,12 +24,12 @@ rayon = "1.1.0" # Dependencies for caching. [dependencies.serde] -version = "1.0.98" +version = "1.0.99" features = ["rc"] [dependencies.serde_derive] version = "1.0.98" [dependencies.serde_bytes] -version = "0.11.1" +version = "0.11.2" [dependencies.serde-bench] version = "0.0.7" diff --git a/lib/clif-backend/src/libcalls.rs b/lib/clif-backend/src/libcalls.rs index d7fe5ab5a25..d03e9e899a6 100644 --- a/lib/clif-backend/src/libcalls.rs +++ b/lib/clif-backend/src/libcalls.rs @@ -76,8 +76,7 @@ pub extern "C" fn nearbyintf64(x: f64) -> f64 { } } -/// A declaration for the stack probe function in Rust's standard library, for -/// catching callstack overflow. -extern "C" { - pub fn __rust_probestack(); -} +// FIXME: Is there a replacement on AArch64? +#[cfg(all(target_os = "linux", target_arch = "aarch64"))] +#[no_mangle] +pub extern "C" fn __rust_probestack() {} diff --git a/lib/clif-backend/src/signal/unix.rs b/lib/clif-backend/src/signal/unix.rs index 2f12713fa6a..39f3aa893c6 100644 --- a/lib/clif-backend/src/signal/unix.rs +++ b/lib/clif-backend/src/signal/unix.rs @@ -138,6 +138,14 @@ pub unsafe fn do_unwind(signum: i32, siginfo: *const c_void, ucontext: *const c_ longjmp(jmp_buf as *mut ::nix::libc::c_void, signum) } +#[cfg(all(target_os = "linux", target_arch = "aarch64"))] +unsafe fn get_faulting_addr_and_ip( + _siginfo: *const c_void, + _ucontext: *const c_void, +) -> (*const c_void, *const c_void) { + (::std::ptr::null(), ::std::ptr::null()) +} + #[cfg(all(target_os = "linux", target_arch = "x86_64"))] unsafe fn get_faulting_addr_and_ip( siginfo: *const c_void, @@ -230,5 +238,6 @@ unsafe fn get_faulting_addr_and_ip( #[cfg(not(any( all(target_os = "macos", target_arch = "x86_64"), all(target_os = "linux", target_arch = "x86_64"), + all(target_os = "linux", target_arch = "aarch64"), )))] compile_error!("This crate doesn't yet support compiling on operating systems other than linux and macos and architectures other than x86_64"); diff --git a/lib/emscripten/src/env/unix/mod.rs b/lib/emscripten/src/env/unix/mod.rs index 486ae337949..0e62e8e2f62 100644 --- a/lib/emscripten/src/env/unix/mod.rs +++ b/lib/emscripten/src/env/unix/mod.rs @@ -159,7 +159,7 @@ pub fn _gai_strerror(ctx: &mut Ctx, ecode: i32) -> i32 { .unwrap() }; for (i, byte) in bytes.iter().enumerate() { - writer[i].set(*byte as i8); + writer[i].set(*byte as _); } string_on_guest.offset() as _ @@ -283,7 +283,7 @@ pub fn _getaddrinfo( .deref(ctx.memory(0), 0, str_size as _) .unwrap(); for (i, b) in canonname_bytes.into_iter().enumerate() { - guest_canonname_writer[i].set(*b as i8) + guest_canonname_writer[i].set(*b as _) } guest_canonname diff --git a/lib/emscripten/src/exec.rs b/lib/emscripten/src/exec.rs index 5751e3199a2..87971c69b63 100644 --- a/lib/emscripten/src/exec.rs +++ b/lib/emscripten/src/exec.rs @@ -37,7 +37,7 @@ pub fn execvp(ctx: &mut Ctx, command_name_offset: u32, argv_offset: u32) -> i32 // construct raw pointers and hand them to `execvp` let command_pointer = command_name_string.as_ptr() as *const i8; let args_pointer = argv.as_ptr(); - unsafe { libc_execvp(command_pointer, args_pointer) } + unsafe { libc_execvp(command_pointer as *const _, args_pointer as *const *const _) } } /// execl diff --git a/lib/emscripten/src/io/unix.rs b/lib/emscripten/src/io/unix.rs index c9206b343f4..740210d460a 100644 --- a/lib/emscripten/src/io/unix.rs +++ b/lib/emscripten/src/io/unix.rs @@ -23,7 +23,7 @@ pub fn printf(ctx: &mut Ctx, memory_offset: i32, extra: i32) -> i32 { pub fn chroot(ctx: &mut Ctx, name_ptr: i32) -> i32 { debug!("emscripten::chroot"); let name = emscripten_memory_pointer!(ctx.memory(0), name_ptr) as *const i8; - unsafe { _chroot(name) } + unsafe { _chroot(name as *const _) } } /// getpwuid diff --git a/lib/emscripten/src/libc.rs b/lib/emscripten/src/libc.rs index 988f9c11b36..0c9d6ef11dd 100644 --- a/lib/emscripten/src/libc.rs +++ b/lib/emscripten/src/libc.rs @@ -54,7 +54,7 @@ pub fn killpg(_ctx: &mut Ctx, _a: i32, _b: i32) -> i32 { pub fn pathconf(ctx: &mut Ctx, path_ptr: i32, name: i32) -> i32 { debug!("emscripten::pathconf"); let path = emscripten_memory_pointer!(ctx.memory(0), path_ptr) as *const i8; - unsafe { libc::pathconf(path, name).try_into().unwrap() } + unsafe { libc::pathconf(path as *const _, name).try_into().unwrap() } } #[cfg(not(unix))] diff --git a/lib/emscripten/src/syscalls/mod.rs b/lib/emscripten/src/syscalls/mod.rs index 8c1b0a43af7..b098bd1529e 100644 --- a/lib/emscripten/src/syscalls/mod.rs +++ b/lib/emscripten/src/syscalls/mod.rs @@ -97,7 +97,7 @@ pub fn ___syscall6(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int pub fn ___syscall12(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int { debug!("emscripten::___syscall12 (chdir) {}", _which); let path_ptr = varargs.get_str(ctx); - let real_path_owned = get_cstr_path(ctx, path_ptr); + let real_path_owned = get_cstr_path(ctx, path_ptr as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -168,13 +168,13 @@ pub fn ___syscall38(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> i32 { debug!("emscripten::___syscall38 (rename)"); let old_path = varargs.get_str(ctx); let new_path = varargs.get_str(ctx); - let real_old_path_owned = get_cstr_path(ctx, old_path); + let real_old_path_owned = get_cstr_path(ctx, old_path as *const _); let real_old_path = if let Some(ref rp) = real_old_path_owned { rp.as_c_str().as_ptr() } else { old_path }; - let real_new_path_owned = get_cstr_path(ctx, new_path); + let real_new_path_owned = get_cstr_path(ctx, new_path as *const _); let real_new_path = if let Some(ref rp) = real_new_path_owned { rp.as_c_str().as_ptr() } else { @@ -194,7 +194,7 @@ pub fn ___syscall38(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> i32 { pub fn ___syscall40(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int { debug!("emscripten::___syscall40 (rmdir)"); let pathname_addr = varargs.get_str(ctx); - let real_path_owned = get_cstr_path(ctx, pathname_addr); + let real_path_owned = get_cstr_path(ctx, pathname_addr as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -359,7 +359,7 @@ pub fn ___syscall183(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> i32 let buf_writer = buf_offset.deref(ctx.memory(0), 0, len as u32 + 1).unwrap(); for (i, byte) in path_string.bytes().enumerate() { - buf_writer[i].set(byte as i8); + buf_writer[i].set(byte as _); } buf_writer[len].set(0); buf_offset.offset() as i32 @@ -535,7 +535,7 @@ pub fn ___syscall195(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in let pathname_addr = varargs.get_str(ctx); let buf: u32 = varargs.get(ctx); - let real_path_owned = get_cstr_path(ctx, pathname_addr); + let real_path_owned = get_cstr_path(ctx, pathname_addr as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { diff --git a/lib/emscripten/src/syscalls/unix.rs b/lib/emscripten/src/syscalls/unix.rs index cff58545202..000a3e31920 100644 --- a/lib/emscripten/src/syscalls/unix.rs +++ b/lib/emscripten/src/syscalls/unix.rs @@ -146,7 +146,7 @@ pub fn ___syscall5(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int let pathname_addr = varargs.get_str(ctx); let flags: i32 = varargs.get(ctx); let mode: u32 = varargs.get(ctx); - let real_path_owned = utils::get_cstr_path(ctx, pathname_addr); + let real_path_owned = utils::get_cstr_path(ctx, pathname_addr as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -198,13 +198,13 @@ pub fn ___syscall83(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int let path1 = varargs.get_str(ctx); let path2 = varargs.get_str(ctx); - let real_path1_owned = utils::get_cstr_path(ctx, path1); + let real_path1_owned = utils::get_cstr_path(ctx, path1 as *const _); let real_path1 = if let Some(ref rp) = real_path1_owned { rp.as_c_str().as_ptr() } else { path1 }; - let real_path2_owned = utils::get_cstr_path(ctx, path2); + let real_path2_owned = utils::get_cstr_path(ctx, path2 as *const _); let real_path2 = if let Some(ref rp) = real_path2_owned { rp.as_c_str().as_ptr() } else { @@ -227,7 +227,7 @@ pub fn ___syscall85(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> i32 { let buf = varargs.get_str(ctx); // let buf_addr: i32 = varargs.get(ctx); let buf_size: i32 = varargs.get(ctx); - let real_path_owned = get_cstr_path(ctx, pathname_addr); + let real_path_owned = get_cstr_path(ctx, pathname_addr as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -266,7 +266,7 @@ pub fn ___syscall194(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in pub fn ___syscall198(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int { debug!("emscripten::___syscall198 (lchown) {}", _which); let path_ptr = varargs.get_str(ctx); - let real_path_owned = utils::get_cstr_path(ctx, path_ptr); + let real_path_owned = utils::get_cstr_path(ctx, path_ptr as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -307,7 +307,7 @@ pub fn ___syscall212(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in debug!("emscripten::___syscall212 (chown) {}", _which); let pathname_addr = varargs.get_str(ctx); - let real_path_owned = utils::get_cstr_path(ctx, pathname_addr); + let real_path_owned = utils::get_cstr_path(ctx, pathname_addr as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -336,7 +336,7 @@ pub fn ___syscall219(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in pub fn ___syscall33(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int { debug!("emscripten::___syscall33 (access) {}", _which); let path = varargs.get_str(ctx); - let real_path_owned = utils::get_cstr_path(ctx, path); + let real_path_owned = utils::get_cstr_path(ctx, path as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -364,7 +364,7 @@ pub fn ___syscall34(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int pub fn ___syscall39(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int { debug!("emscripten::___syscall39 (mkdir) {}", _which); let pathname_addr = varargs.get_str(ctx); - let real_path_owned = utils::get_cstr_path(ctx, pathname_addr); + let real_path_owned = utils::get_cstr_path(ctx, pathname_addr as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -986,7 +986,7 @@ pub fn ___syscall122(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in pub fn ___syscall196(ctx: &mut Ctx, _which: i32, mut varargs: VarArgs) -> i32 { debug!("emscripten::___syscall196 (lstat64) {}", _which); let path = varargs.get_str(ctx); - let real_path_owned = utils::get_cstr_path(ctx, path); + let real_path_owned = utils::get_cstr_path(ctx, path as *const _); let real_path = if let Some(ref rp) = real_path_owned { rp.as_c_str().as_ptr() } else { @@ -1063,7 +1063,7 @@ pub fn ___syscall220(ctx: &mut Ctx, _which: i32, mut varargs: VarArgs) -> i32 { let upper_bound = std::cmp::min((*dirent).d_reclen, 255) as usize; let mut i = 0; while i < upper_bound { - *(dirp.add(pos + 11 + i) as *mut i8) = (*dirent).d_name[i]; + *(dirp.add(pos + 11 + i) as *mut i8) = (*dirent).d_name[i] as _; i += 1; } // We set the termination string char diff --git a/lib/emscripten/src/utils.rs b/lib/emscripten/src/utils.rs index 57d26f24e17..2585af43fea 100644 --- a/lib/emscripten/src/utils.rs +++ b/lib/emscripten/src/utils.rs @@ -236,7 +236,8 @@ pub fn read_string_from_wasm(memory: &Memory, offset: u32) -> String { pub fn get_cstr_path(ctx: &mut Ctx, path: *const i8) -> Option { use std::collections::VecDeque; - let path_str = unsafe { std::ffi::CStr::from_ptr(path).to_str().unwrap() }.to_string(); + let path_str = + unsafe { std::ffi::CStr::from_ptr(path as *const _).to_str().unwrap() }.to_string(); let data = get_emscripten_data(ctx); let path = PathBuf::from(path_str); let mut prefix_added = false; diff --git a/lib/runtime-core/Cargo.toml b/lib/runtime-core/Cargo.toml index 9c994cf1247..1a3f8a75d65 100644 --- a/lib/runtime-core/Cargo.toml +++ b/lib/runtime-core/Cargo.toml @@ -26,13 +26,13 @@ features = ["serde-1"] # Dependencies for caching. [dependencies.serde] -version = "1.0.98" +version = "1.0.99" # This feature is required for serde to support serializing/deserializing reference counted pointers (e.g. Rc and Arc). features = ["rc"] [dependencies.serde_derive] version = "1.0.98" [dependencies.serde_bytes] -version = "0.11.1" +version = "0.11.2" [dependencies.serde-bench] version = "0.0.7" [dependencies.blake2b_simd]