diff --git a/lib/emscripten/src/env.rs b/lib/emscripten/src/env.rs index d686ddcce..8889906a7 100644 --- a/lib/emscripten/src/env.rs +++ b/lib/emscripten/src/env.rs @@ -143,14 +143,14 @@ pub extern "C" fn _getgrnam(name_ptr: c_int, vmctx: &mut Ctx) -> c_int { pub fn call_malloc(size: i32, vmctx: &mut Ctx) -> u32 { unimplemented!() -// let ret = instance -// .call("_malloc", &[Value::I32(size)]) -// .expect("_malloc call failed"); -// if let [Value::I32(x)] = ret.as_slice() { -// *x as u32 -// } else { -// panic!("unexpected value from _malloc: {:?}", ret); -// } + // let ret = instance + // .call("_malloc", &[Value::I32(size)]) + // .expect("_malloc call failed"); + // if let [Value::I32(x)] = ret.as_slice() { + // *x as u32 + // } else { + // panic!("unexpected value from _malloc: {:?}", ret); + // } } pub fn call_memalign(alignment: u32, size: u32, vmctx: &mut Ctx) -> u32 { @@ -171,21 +171,21 @@ pub fn call_memalign(alignment: u32, size: u32, vmctx: &mut Ctx) -> u32 { pub fn call_memset(pointer: u32, value: i32, size: u32, vmctx: &mut Ctx) -> u32 { unimplemented!() -// let ret = instance -// .call( -// "_memset", -// &[ -// Value::I32(pointer as i32), -// Value::I32(value), -// Value::I32(size as i32), -// ], -// ) -// .expect("_memset call failed"); -// if let [Value::I32(x)] = ret.as_slice() { -// *x as u32 -// } else { -// panic!("unexpected value from _memset {:?}", ret); -// } + // let ret = instance + // .call( + // "_memset", + // &[ + // Value::I32(pointer as i32), + // Value::I32(value), + // Value::I32(size as i32), + // ], + // ) + // .expect("_memset call failed"); + // if let [Value::I32(x)] = ret.as_slice() { + // *x as u32 + // } else { + // panic!("unexpected value from _memset {:?}", ret); + // } } pub extern "C" fn _getpagesize() -> u32 { diff --git a/lib/emscripten/src/exception.rs b/lib/emscripten/src/exception.rs index cf8a12ea6..7f062a546 100644 --- a/lib/emscripten/src/exception.rs +++ b/lib/emscripten/src/exception.rs @@ -1,6 +1,6 @@ use super::env; use super::process::_abort; -use wasmer_runtime_core::{Instance, vm::Ctx}; +use wasmer_runtime_core::{vm::Ctx, Instance}; /// emscripten: ___cxa_allocate_exception pub extern "C" fn ___cxa_allocate_exception(size: u32, vmctx: &mut Ctx) -> u32 { diff --git a/lib/emscripten/src/lib.rs b/lib/emscripten/src/lib.rs index afc709bed..5c91fbd6a 100644 --- a/lib/emscripten/src/lib.rs +++ b/lib/emscripten/src/lib.rs @@ -9,16 +9,12 @@ use wasmer_runtime_core::{ export::{Context, Export, FuncPointer, GlobalPointer, MemoryPointer, TablePointer}, import::{ImportObject, Namespace}, memory::LinearMemory, + structures::TypedIndex, table::TableBacking, types::{ - FuncSig, GlobalDesc, + ElementType, FuncSig, GlobalDesc, LocalMemoryIndex, Memory, Table, Type::{self, *}, - Memory, - LocalMemoryIndex, - ElementType, - Table, }, - structures::TypedIndex, vm::LocalGlobal, vm::LocalMemory, vm::LocalTable, @@ -183,7 +179,13 @@ impl<'a> EmscriptenGlobals<'a> { data.insert("env", env_namepace); data.insert("global", global_namepace); - Self { data, memory, vm_memory, table, vm_table } + Self { + data, + memory, + vm_memory, + table, + vm_table, + } } } @@ -203,9 +205,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject let null_ctx = Context::External(ptr::null_mut()); // Memory - let local_memory = unsafe { - MemoryPointer::new(&mut globals.vm_memory) - }; + let local_memory = unsafe { MemoryPointer::new(&mut globals.vm_memory) }; env_namespace.insert( "memory".to_string(), @@ -216,14 +216,12 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject min: 256, max: Some(256), shared: false, - } + }, }, ); // Table - let local_table = unsafe { - TablePointer::new(&mut globals.vm_table) - }; + let local_table = unsafe { TablePointer::new(&mut globals.vm_table) }; env_namespace.insert( "table".to_string(), @@ -235,7 +233,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject ty: ElementType::Anyfunc, min: 10, max: Some(10), - } + }, }, ); diff --git a/lib/emscripten/src/syscalls.rs b/lib/emscripten/src/syscalls.rs index 3cafdcc64..fa395dfc9 100644 --- a/lib/emscripten/src/syscalls.rs +++ b/lib/emscripten/src/syscalls.rs @@ -105,11 +105,7 @@ pub extern "C" fn ___syscall1(which: c_int, mut varargs: VarArgs, vmctx: &mut Ct } /// read -pub extern "C" fn ___syscall3( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> ssize_t { +pub extern "C" fn ___syscall3(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> ssize_t { debug!("emscripten::___syscall3 (read) {}", which); let fd: i32 = varargs.get(vmctx); let buf: u32 = varargs.get(vmctx); @@ -122,11 +118,7 @@ pub extern "C" fn ___syscall3( } /// write -pub extern "C" fn ___syscall4( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall4(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall4 (write) {}", which); let fd: i32 = varargs.get(vmctx); let buf: u32 = varargs.get(vmctx); @@ -137,11 +129,7 @@ pub extern "C" fn ___syscall4( } /// open -pub extern "C" fn ___syscall5( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall5(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall5 (open) {}", which); let pathname: u32 = varargs.get(vmctx); let flags: i32 = varargs.get(vmctx); @@ -157,11 +145,7 @@ pub extern "C" fn ___syscall5( } /// close -pub extern "C" fn ___syscall6( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall6(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall6 (close) {}", which); let fd: i32 = varargs.get(vmctx); debug!("fd: {}", fd); @@ -169,11 +153,7 @@ pub extern "C" fn ___syscall6( } // chdir -pub extern "C" fn ___syscall12( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall12(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall12 (chdir) {}", which); let path_addr: i32 = varargs.get(vmctx); unsafe { @@ -192,11 +172,7 @@ pub extern "C" fn ___syscall20() -> pid_t { } // mkdir -pub extern "C" fn ___syscall39( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall39(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall39 (mkdir) {}", which); let pathname: u32 = varargs.get(vmctx); let mode: u32 = varargs.get(vmctx); @@ -205,11 +181,7 @@ pub extern "C" fn ___syscall39( } // rmdir -pub extern "C" fn ___syscall40( - _which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall40(_which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall40 (rmdir)"); let pathname: u32 = varargs.get(vmctx); let pathname_addr = vmctx.memory(0)[pathname as usize] as *const i8; @@ -217,11 +189,7 @@ pub extern "C" fn ___syscall40( } /// ioctl -pub extern "C" fn ___syscall54( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall54(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall54 (ioctl) {}", which); let fd: i32 = varargs.get(vmctx); let request: u32 = varargs.get(vmctx); @@ -263,11 +231,7 @@ pub extern "C" fn ___syscall54( } // setpgid -pub extern "C" fn ___syscall57( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall57(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall57 (setpgid) {}", which); let pid: i32 = varargs.get(vmctx); let pgid: i32 = varargs.get(vmctx); @@ -275,11 +239,7 @@ pub extern "C" fn ___syscall57( } // dup2 -pub extern "C" fn ___syscall63( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall63(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall63 (dup2) {}", which); let src: i32 = varargs.get(vmctx); @@ -296,11 +256,7 @@ pub extern "C" fn ___syscall64() -> pid_t { // socketcall #[allow(clippy::cast_ptr_alignment)] -pub extern "C" fn ___syscall102( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall102(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall102 (socketcall) {}", which); let call: u32 = varargs.get(vmctx); let mut socket_varargs: VarArgs = varargs.get(vmctx); @@ -547,11 +503,7 @@ pub extern "C" fn ___syscall102( /// wait4 #[allow(clippy::cast_ptr_alignment)] -pub extern "C" fn ___syscall114( - _which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> pid_t { +pub extern "C" fn ___syscall114(_which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> pid_t { debug!("emscripten::___syscall114 (wait4)"); let pid: pid_t = varargs.get(vmctx); let status: u32 = varargs.get(vmctx); @@ -569,11 +521,7 @@ pub extern "C" fn ___syscall114( /// uname // NOTE: Wondering if we should return custom utsname, like Emscripten. -pub extern "C" fn ___syscall122( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall122(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall122 (uname) {}", which); let buf: u32 = varargs.get(vmctx); debug!("=> buf: {}", buf); @@ -583,11 +531,7 @@ pub extern "C" fn ___syscall122( // select #[allow(clippy::cast_ptr_alignment)] -pub extern "C" fn ___syscall142( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall142(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall142 (newselect) {}", which); let nfds: i32 = varargs.get(vmctx); @@ -606,11 +550,7 @@ pub extern "C" fn ___syscall142( } // mmap2 -pub extern "C" fn ___syscall192( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall192(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall192 (mmap2) {}", which); let addr: i32 = varargs.get(vmctx); let len: u32 = varargs.get(vmctx); @@ -636,11 +576,7 @@ pub extern "C" fn ___syscall192( } /// lseek -pub extern "C" fn ___syscall140( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> off_t { +pub extern "C" fn ___syscall140(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> off_t { debug!("emscripten::___syscall140 (lseek) {}", which); let fd: i32 = varargs.get(vmctx); let offset: i64 = varargs.get(vmctx); @@ -651,11 +587,7 @@ pub extern "C" fn ___syscall140( /// readv #[allow(clippy::cast_ptr_alignment)] -pub extern "C" fn ___syscall145( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> ssize_t { +pub extern "C" fn ___syscall145(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> ssize_t { debug!("emscripten::___syscall145 (readv) {}", which); // let fd: i32 = varargs.get(vmctx); // let iov: u32 = varargs.get(vmctx); @@ -695,11 +627,7 @@ pub extern "C" fn ___syscall145( // writev #[allow(clippy::cast_ptr_alignment)] -pub extern "C" fn ___syscall146( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> ssize_t { +pub extern "C" fn ___syscall146(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> ssize_t { debug!("emscripten::___syscall146 (writev) {}", which); let fd: i32 = varargs.get(vmctx); let iov: i32 = varargs.get(vmctx); @@ -731,11 +659,7 @@ pub extern "C" fn ___syscall146( } // pread -pub extern "C" fn ___syscall180( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall180(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall180 (pread) {}", which); let fd: i32 = varargs.get(vmctx); let buf: u32 = varargs.get(vmctx); @@ -752,11 +676,7 @@ pub extern "C" fn ___syscall180( } // pwrite -pub extern "C" fn ___syscall181( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall181(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall181 (pwrite) {}", which); let fd: i32 = varargs.get(vmctx); let buf: u32 = varargs.get(vmctx); @@ -777,11 +697,7 @@ pub extern "C" fn ___syscall181( } // stat64 -pub extern "C" fn ___syscall195( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall195(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall195 (stat64) {}", which); let pathname: u32 = varargs.get(vmctx); let buf: u32 = varargs.get(vmctx); @@ -801,11 +717,7 @@ pub extern "C" fn ___syscall195( } // fstat64 -pub extern "C" fn ___syscall197( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall197(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall197 (fstat64) {}", which); let fd: c_int = varargs.get(vmctx); let buf: u32 = varargs.get(vmctx); @@ -842,11 +754,7 @@ pub extern "C" fn ___syscall202() -> gid_t { } // chown -pub extern "C" fn ___syscall212( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall212(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall212 (chown) {}", which); let pathname: u32 = varargs.get(vmctx); @@ -859,11 +767,7 @@ pub extern "C" fn ___syscall212( } // fcntl64 -pub extern "C" fn ___syscall221( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall221(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall221 (fcntl64) {}", which); // fcntl64 let _fd: i32 = varargs.get(vmctx); @@ -875,11 +779,7 @@ pub extern "C" fn ___syscall221( } /// dup3 -pub extern "C" fn ___syscall330( - _which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> pid_t { +pub extern "C" fn ___syscall330(_which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> pid_t { // Implementation based on description at https://linux.die.net/man/2/dup3 debug!("emscripten::___syscall330 (dup3)"); let oldfd: c_int = varargs.get(vmctx); @@ -913,11 +813,7 @@ pub extern "C" fn ___syscall330( } // prlimit64 -pub extern "C" fn ___syscall340( - which: c_int, - mut varargs: VarArgs, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___syscall340(which: c_int, mut varargs: VarArgs, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___syscall340 (prlimit64), {}", which); // NOTE: Doesn't really matter. Wasm modules cannot exceed WASM_PAGE_SIZE anyway. let _pid: i32 = varargs.get(vmctx); diff --git a/lib/emscripten/src/time.rs b/lib/emscripten/src/time.rs index bfaeb8331..e2991bffa 100644 --- a/lib/emscripten/src/time.rs +++ b/lib/emscripten/src/time.rs @@ -51,11 +51,7 @@ pub extern "C" fn _gettimeofday(tp: c_int, tz: c_int, vmctx: &mut Ctx) -> c_int /// emscripten: _clock_gettime #[allow(clippy::cast_ptr_alignment)] -pub extern "C" fn _clock_gettime( - clk_id: libc::clockid_t, - tp: c_int, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn _clock_gettime(clk_id: libc::clockid_t, tp: c_int, vmctx: &mut Ctx) -> c_int { debug!("emscripten::_clock_gettime {} {}", clk_id, tp); #[repr(C)] struct GuestTimeSpec { @@ -84,11 +80,7 @@ pub extern "C" fn _clock_gettime( } /// emscripten: ___clock_gettime -pub extern "C" fn ___clock_gettime( - clk_id: libc::clockid_t, - tp: c_int, - vmctx: &mut Ctx, -) -> c_int { +pub extern "C" fn ___clock_gettime(clk_id: libc::clockid_t, tp: c_int, vmctx: &mut Ctx) -> c_int { debug!("emscripten::___clock_gettime {} {}", clk_id, tp); _clock_gettime(clk_id, tp, vmctx) } diff --git a/lib/emscripten/src/utils.rs b/lib/emscripten/src/utils.rs index 23bb9e68e..f98bfca1f 100644 --- a/lib/emscripten/src/utils.rs +++ b/lib/emscripten/src/utils.rs @@ -144,8 +144,8 @@ mod tests { fn should_detect_emscripten_files() { const wast_bytes: &[u8] = include_bytes!("tests/is_emscripten_true.wast"); let wasm_binary = wat2wasm(wast_bytes.to_vec()).expect("Can't convert to wasm"); - let module = - compile_with(&wasm_binary[..], &CraneliftCompiler::new()).expect("WASM can't be compiled"); + let module = compile_with(&wasm_binary[..], &CraneliftCompiler::new()) + .expect("WASM can't be compiled"); let module = Arc::new(module); assert!(is_emscripten_module(&module)); } @@ -154,8 +154,8 @@ mod tests { fn should_detect_non_emscripten_files() { const wast_bytes: &[u8] = include_bytes!("tests/is_emscripten_false.wast"); let wasm_binary = wat2wasm(wast_bytes.to_vec()).expect("Can't convert to wasm"); - let module = - compile_with(&wasm_binary[..], &CraneliftCompiler::new()).expect("WASM can't be compiled"); + let module = compile_with(&wasm_binary[..], &CraneliftCompiler::new()) + .expect("WASM can't be compiled"); let module = Arc::new(module); assert!(!is_emscripten_module(&module)); }