From ad3d361f76fb123633d29d30c2331a7abb03847a Mon Sep 17 00:00:00 2001 From: Mackenzie Clark Date: Fri, 22 Feb 2019 12:32:14 -0800 Subject: [PATCH 1/5] add the syscall and create a test --- lib/emscripten/emtests/test_getcwd.c | 10 +++++++++ lib/emscripten/emtests/test_getcwd.out | 1 + lib/emscripten/emtests/test_getcwd.wasm | Bin 0 -> 22468 bytes lib/emscripten/src/lib.rs | 1 + lib/emscripten/src/syscalls/mod.rs | 23 ++++++++++++++++++++ lib/emscripten/tests/emtests/test_getcwd.rs | 9 ++++++++ 6 files changed, 44 insertions(+) create mode 100644 lib/emscripten/emtests/test_getcwd.c create mode 100644 lib/emscripten/emtests/test_getcwd.out create mode 100644 lib/emscripten/emtests/test_getcwd.wasm create mode 100644 lib/emscripten/tests/emtests/test_getcwd.rs diff --git a/lib/emscripten/emtests/test_getcwd.c b/lib/emscripten/emtests/test_getcwd.c new file mode 100644 index 000000000..a3955d470 --- /dev/null +++ b/lib/emscripten/emtests/test_getcwd.c @@ -0,0 +1,10 @@ +#include +#include + +int main() { + const unsigned int size = 256; + char cwd[size] = {}; + char* buf = getcwd(cwd, size); + printf("getcwd\n"); + return 0; +} diff --git a/lib/emscripten/emtests/test_getcwd.out b/lib/emscripten/emtests/test_getcwd.out new file mode 100644 index 000000000..263db4c74 --- /dev/null +++ b/lib/emscripten/emtests/test_getcwd.out @@ -0,0 +1 @@ +getcwd diff --git a/lib/emscripten/emtests/test_getcwd.wasm b/lib/emscripten/emtests/test_getcwd.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5f93e3aa2931553d2a51b3b3910c18d16ab17c6d GIT binary patch literal 22468 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 ImportObject "___syscall168" => func!(crate::syscalls::___syscall168), "___syscall180" => func!(crate::syscalls::___syscall180), "___syscall181" => func!(crate::syscalls::___syscall181), + "___syscall183" => func!(crate::syscalls::___syscall183), "___syscall191" => func!(crate::syscalls::___syscall191), "___syscall192" => func!(crate::syscalls::___syscall192), "___syscall194" => func!(crate::syscalls::___syscall194), diff --git a/lib/emscripten/src/syscalls/mod.rs b/lib/emscripten/src/syscalls/mod.rs index ef9ef40ee..c6590cb2d 100644 --- a/lib/emscripten/src/syscalls/mod.rs +++ b/lib/emscripten/src/syscalls/mod.rs @@ -48,6 +48,10 @@ use std::slice; // Other platforms do otherwise. #[cfg(target_os = "darwin")] use libc::SO_NOSIGPIPE; +use crate::utils::copy_cstr_into_wasm; +use crate::env::get_emscripten_data; +use std::ffi::CString; + #[cfg(not(target_os = "darwin"))] const SO_NOSIGPIPE: c_int = 0; @@ -186,6 +190,25 @@ pub fn ___syscall110(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 { -1 } +// getcwd +pub fn ___syscall183(ctx: &mut Ctx, buf: u32, _size: u32) -> u32 { + debug!("emscripten::___syscall183"); + use std::env; + let path = env::current_dir(); + match path { + Ok(path_buf) => { + // write path into buffer + let path_string = path_buf.display().to_string(); + let path_c_string = CString::new(path_string).unwrap(); + let offset = unsafe { copy_cstr_into_wasm(ctx, path_c_string.as_ptr()) }; + offset + } + Err(e) => { + unimplemented!() + } + } +} + // mmap2 pub fn ___syscall192(ctx: &mut Ctx, which: c_int, mut varargs: VarArgs) -> c_int { debug!("emscripten::___syscall192 (mmap2) {}", which); diff --git a/lib/emscripten/tests/emtests/test_getcwd.rs b/lib/emscripten/tests/emtests/test_getcwd.rs new file mode 100644 index 000000000..ec770b505 --- /dev/null +++ b/lib/emscripten/tests/emtests/test_getcwd.rs @@ -0,0 +1,9 @@ +#[test] +fn test_getcwd() { + assert_emscripten_output!( + "../../emtests/test_getcwd.wasm", + "getcwd", + vec![], + "../../emtests/test_getcwd.out" + ); +} From 0f9369c67d67a3d4794ad0edc7ceab0190db43d3 Mon Sep 17 00:00:00 2001 From: Mackenzie Clark Date: Fri, 22 Feb 2019 12:39:19 -0800 Subject: [PATCH 2/5] cargo fmt and better error message --- lib/emscripten/src/syscalls/mod.rs | 8 +++----- lib/emscripten/tests/emtests/mod.rs | 1 + 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/emscripten/src/syscalls/mod.rs b/lib/emscripten/src/syscalls/mod.rs index c6590cb2d..71cd43549 100644 --- a/lib/emscripten/src/syscalls/mod.rs +++ b/lib/emscripten/src/syscalls/mod.rs @@ -46,10 +46,10 @@ use std::slice; // Another conditional constant for name resolution: Macos et iOS use // SO_NOSIGPIPE as a setsockopt flag to disable SIGPIPE emission on socket. // Other platforms do otherwise. +use crate::env::get_emscripten_data; +use crate::utils::copy_cstr_into_wasm; #[cfg(target_os = "darwin")] use libc::SO_NOSIGPIPE; -use crate::utils::copy_cstr_into_wasm; -use crate::env::get_emscripten_data; use std::ffi::CString; #[cfg(not(target_os = "darwin"))] @@ -203,9 +203,7 @@ pub fn ___syscall183(ctx: &mut Ctx, buf: u32, _size: u32) -> u32 { let offset = unsafe { copy_cstr_into_wasm(ctx, path_c_string.as_ptr()) }; offset } - Err(e) => { - unimplemented!() - } + Err(e) => panic!("Failed to read current directory from environment."), } } diff --git a/lib/emscripten/tests/emtests/mod.rs b/lib/emscripten/tests/emtests/mod.rs index 37c88a041..a280fc48a 100644 --- a/lib/emscripten/tests/emtests/mod.rs +++ b/lib/emscripten/tests/emtests/mod.rs @@ -54,6 +54,7 @@ mod test_funcptrfunc; mod test_funcs; mod test_functionpointer_libfunc_varargs; mod test_fwrite_0; +mod test_getcwd; mod test_getgep; mod test_getloadavg; mod test_getopt; From 966be3ee8f7760fffb6e414c577199e2ed480b6f Mon Sep 17 00:00:00 2001 From: Mackenzie Clark Date: Fri, 22 Feb 2019 14:54:01 -0800 Subject: [PATCH 3/5] right to the out buffer that was passed in syscall183 --- lib/emscripten/src/syscalls/mod.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/emscripten/src/syscalls/mod.rs b/lib/emscripten/src/syscalls/mod.rs index 71cd43549..3f310be06 100644 --- a/lib/emscripten/src/syscalls/mod.rs +++ b/lib/emscripten/src/syscalls/mod.rs @@ -48,6 +48,7 @@ use std::slice; // Other platforms do otherwise. use crate::env::get_emscripten_data; use crate::utils::copy_cstr_into_wasm; +use crate::utils::read_string_from_wasm; #[cfg(target_os = "darwin")] use libc::SO_NOSIGPIPE; use std::ffi::CString; @@ -191,20 +192,21 @@ pub fn ___syscall110(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 { } // getcwd -pub fn ___syscall183(ctx: &mut Ctx, buf: u32, _size: u32) -> u32 { +pub fn ___syscall183(ctx: &mut Ctx, buf_offset: u32, _size: u32) -> u32 { debug!("emscripten::___syscall183"); use std::env; let path = env::current_dir(); - match path { - Ok(path_buf) => { - // write path into buffer - let path_string = path_buf.display().to_string(); - let path_c_string = CString::new(path_string).unwrap(); - let offset = unsafe { copy_cstr_into_wasm(ctx, path_c_string.as_ptr()) }; - offset + let path_string = path.unwrap().display().to_string(); + let len = path_string.len(); + unsafe { + let pointer_to_buffer = emscripten_memory_pointer!(ctx.memory(0), buf_offset) as *mut libc::c_char; + let slice = slice::from_raw_parts_mut(pointer_to_buffer, len.clone()); + for (byte, loc) in path_string.bytes().zip(slice.iter_mut()) { + *loc = byte as _; } - Err(e) => panic!("Failed to read current directory from environment."), + *pointer_to_buffer.add(len.clone()) = 0; } + buf_offset } // mmap2 From b5056d676acb8f30ae9126cc84dce86e5652e690 Mon Sep 17 00:00:00 2001 From: Mackenzie Clark Date: Fri, 22 Feb 2019 15:07:55 -0800 Subject: [PATCH 4/5] update wasm file --- lib/emscripten/emtests/test_getcwd.wasm | Bin 22468 -> 45896 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/emscripten/emtests/test_getcwd.wasm b/lib/emscripten/emtests/test_getcwd.wasm index 5f93e3aa2931553d2a51b3b3910c18d16ab17c6d..0cf6f73a2dcc92510cd370ef0a968f67c65463c5 100644 GIT binary patch literal 45896 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 delta 2827 zcmZvee{2-T6~}kxX7A2E_w2np10lZio3o9N*dmz5Ka!Xxi-QxZIHjdXt*PWX#2^ks zV;hlD+MHXQ1c8NIjTNlmf(@p1g{9b>E71Uv|8P`SIH^NvLnBHMKUx$K2{jJ5#8La+ z>}~T;rP1wYzWa9Gn>TZBX8Ip|>Ma&9S~_41gUk$=9l&u%QSVi?lMZv=FS&7wi}7;7x(O}L%Zf}+l=KoUv;qii29bN zKDTU9d3nK-#pUJY+51LVObvVNy62cLRTPxoqM+T&lf}WJU{UV#;%V&U83FK0ZX43D zySQY4h>%yh6bYXo1qkT@uc{H-d9S5Tih6#=QlE+@>NS|%yx&Uy$*f_dX8E+*>O0AY zEtTVch{RHV6`3~sJLCNp{N7u|4SU#vj|kwJi9V#MwT0tT z736H-eO9_XXNX0ItpqpZEQ2fD_Ux7)F!+GkY?r*qY;^NzP`lY0?94_t=##vto563> z_tm)-jD}6-U7%sp)!|A;f$xkAldd9*w3}^p{+Dx%Tgc55md6Ekmh=@AQr$${mVmsQJyGRk73wGCX8ToD<81b%h6bLz=C~( z|rVy8%$&pa0* zj>DOVdM+kIwO6bibCKR z%lg6?pN*)O3ddMNN%$%L9)&2s6H(`3Ge`5dtm4xV)g+(6SI6WyM-ShLe|K?0UKMav z*r|H?v4D>;c=)r(OQ`el(#VYVeqF$IVT%rVL)hqWK3?lj$Xgf>TGbYv``)Cs`b+?} zbxAoVFglpilbO=5J{Q=9&&4<8JpuP9JyRKjKqj&G1>DyYoEQ9Qm?x7#oKtZkHE2O2 zrY&I4Ml{%$BCw9~cqNlRX92zx_JjprYNunClj$i7w;GvFx-erQlQQkXB@3C9Sr@KY z$fR5*&`WmH!VXE-T)1N)lXBaIISZMTyDltP$fV4>&>cc1rOSn$5HczIUFZuTlhUgp zg)|Vt4oUqk42O_O8FXPZgiOka3lkw^QpQ|37eXfGj0;mCWKt$wm@GZ_H&*|Hx5Ml5*EBpIth zQ)zAfyx!G^OncOVL-fML-KkEMene&C^~4tX;FSBpd}1~J=c!1H>kr21MUDsr0=UIV zK5arHoHiR|+Jv;JcfPabQO3X1?`ZJ!?&XJBY(U%p-2`lZGn4YFi4nn7?FmajSy>TP zxAkR_dv)1;$4g~btkh+X2O@rWmjeGCMPv-`zV)h(+l{G&lX8})(2;O_QNFn)`uBb&W&n^{YmWF z{-mQI|NpvhIieO}r!+wme7{|8qMO03x=-_+XxcHF z_IlX?9omWd=QAx|!$tXtUX#7FBpcV3(wY6r+TD7$G{cK0Cu!jOm?- zmx)P?u*WRCPtfK-#$)#)gNw|WEv|b@!%9A8rB%ZX5AVuXKW@Ab2{2BVDsJP= zB`d?}wxclfj3}7yOh( z%pOI6iNpCBGHTk6o&{NX#WEYRWi*f%R~18RSXAvAs$wPT)KDDndhZXdWJT&fLq(62 zNC1#5hX=sOi_*f;h$Yx5!9^;;6FDxKiQQOw-SHqx|KUW3$a)p;uy&U}@QOM-Ue5Om L_3rrd+z|f-xrN`C From 7fb7529b4803ad487650919d5bd981387b63c03d Mon Sep 17 00:00:00 2001 From: Mackenzie Clark Date: Fri, 22 Feb 2019 15:16:07 -0800 Subject: [PATCH 5/5] cargo fmt --- lib/emscripten/src/syscalls/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/emscripten/src/syscalls/mod.rs b/lib/emscripten/src/syscalls/mod.rs index 3f310be06..2143599f7 100644 --- a/lib/emscripten/src/syscalls/mod.rs +++ b/lib/emscripten/src/syscalls/mod.rs @@ -199,7 +199,8 @@ pub fn ___syscall183(ctx: &mut Ctx, buf_offset: u32, _size: u32) -> u32 { let path_string = path.unwrap().display().to_string(); let len = path_string.len(); unsafe { - let pointer_to_buffer = emscripten_memory_pointer!(ctx.memory(0), buf_offset) as *mut libc::c_char; + let pointer_to_buffer = + emscripten_memory_pointer!(ctx.memory(0), buf_offset) as *mut libc::c_char; let slice = slice::from_raw_parts_mut(pointer_to_buffer, len.clone()); for (byte, loc) in path_string.bytes().zip(slice.iter_mut()) { *loc = byte as _;