diff --git a/lib/emscripten/src/env.rs b/lib/emscripten/src/env.rs index ff5bc6d33..c6887ede0 100644 --- a/lib/emscripten/src/env.rs +++ b/lib/emscripten/src/env.rs @@ -191,5 +191,5 @@ pub extern "C" fn _sysconf(name: c_int, _ctx: &mut Ctx) -> c_long { pub extern "C" fn ___assert_fail(a: c_int, b: c_int, c: c_int, d: c_int, _ctx: &mut Ctx) { debug!("emscripten::___assert_fail {} {} {} {}", a, b, c, d); // TODO: Implement like emscripten expects regarding memory/page size - unimplemented!() + // TODO raise an error } diff --git a/lib/emscripten/src/lib.rs b/lib/emscripten/src/lib.rs index 54507c4dd..95f51e0f7 100644 --- a/lib/emscripten/src/lib.rs +++ b/lib/emscripten/src/lib.rs @@ -2344,6 +2344,30 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject }, ); + env_namespace.insert( + "_emscripten_random", + Export::Function { + func: func!(math, _emscripten_random), + ctx: Context::Internal, + signature: FuncSig { + params: vec![], + returns: vec![F64], + }, + }, + ); + + env_namespace.insert( + "_gmtime", + Export::Function { + func: func!(time, _gmtime), + ctx: Context::Internal, + signature: FuncSig { + params: vec![I32], + returns: vec![I32], + }, + }, + ); + // mock_external!(env_namespace, _time); // mock_external!(env_namespace, _sysconf); // mock_external!(env_namespace, _strftime); @@ -2383,6 +2407,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject // mock_external!(env_namespace, ___syscall102); // mock_external!(env_namespace, ___syscall20); mock_external!(env_namespace, _dlerror); + mock_external!(env_namespace, _gmtime); imports.register("env", env_namespace); imports.register("asm2wasm", asm_namespace); diff --git a/lib/emscripten/src/math.rs b/lib/emscripten/src/math.rs index 33a2ff97a..95f39ce79 100644 --- a/lib/emscripten/src/math.rs +++ b/lib/emscripten/src/math.rs @@ -14,12 +14,17 @@ pub extern "C" fn _llvm_log2_f64(value: f64, _ctx: &mut Ctx) -> f64 { pub extern "C" fn _llvm_log10_f32(value: f64, _ctx: &mut Ctx) -> f64 { debug!("emscripten::_llvm_log10_f32"); - unimplemented!() + -1.0 } pub extern "C" fn _llvm_log2_f32(value: f64, _ctx: &mut Ctx) -> f64 { debug!("emscripten::_llvm_log10_f32"); - unimplemented!() + -1.0 +} + +pub extern "C" fn _emscripten_random(_ctx: &mut Ctx) -> f64 { + debug!("emscripten::_emscripten_random"); + -1.0 } // emscripten: f64-rem diff --git a/lib/emscripten/src/time.rs b/lib/emscripten/src/time.rs index 32bf5f0d9..87f405feb 100644 --- a/lib/emscripten/src/time.rs +++ b/lib/emscripten/src/time.rs @@ -109,6 +109,11 @@ pub extern "C" fn _mktime(one: i32, ctx: &mut Ctx) -> i32 { -1 } +pub extern "C" fn _gmtime(one: i32, ctx: &mut Ctx) -> i32 { + debug!("emscripten::_gmtime"); + -1 +} + #[repr(C)] struct guest_tm { pub tm_sec: c_int, // 0