Improved emscripten imported function arguments

This commit is contained in:
Syrus
2019-01-24 15:44:08 -08:00
parent 6d8465721f
commit 842105f7d9
6 changed files with 22 additions and 19 deletions

View File

@@ -1,6 +1,7 @@
// use std::collections::HashMap;
use wasmer_runtime_core::vm::Ctx;
pub extern "C" fn ___seterrno(value: i32) {
pub extern "C" fn ___seterrno(value: i32, _ctx: &mut Ctx) {
debug!("emscripten::___seterrno {}", value);
// TODO: Incomplete impl
eprintln!("failed to set errno!");

View File

@@ -1,15 +1,15 @@
use libc::printf as _printf;
use wasmer_runtime_core::Instance;
use wasmer_runtime_core::vm::Ctx;
/// putchar
pub use libc::putchar;
/// printf
pub extern "C" fn printf(memory_offset: i32, extra: i32, instance: &Instance) -> i32 {
pub extern "C" fn printf(memory_offset: i32, extra: i32, ctx: &mut Ctx) -> i32 {
debug!("emscripten::printf {}, {}", memory_offset, extra);
unsafe {
let addr = instance.memory_offset_addr(0, memory_offset as _) as _;
let addr = emscripten_memory_pointer!(ctx.memory(0), memory_offset) as _;
_printf(addr, extra)
}
}

View File

@@ -1,27 +1,27 @@
use wasmer_runtime_core::Instance;
use wasmer_runtime_core::vm::Ctx;
// TODO: Need to implement.
/// emscripten: dlopen(filename: *const c_char, flag: c_int) -> *mut c_void
pub extern "C" fn _dlopen(filename: u32, flag: c_int) -> u32 {
pub extern "C" fn _dlopen(filename: u32, flag: c_int, _ctx: &mut Ctx) -> u32 {
debug!("emscripten::_dlopen");
-1
}
/// emscripten: dlclose(handle: *mut c_void) -> c_int
pub extern "C" fn _dlclose(filename: u32) -> u32 {
pub extern "C" fn _dlclose(filename: u32, _ctx: &mut Ctx) -> u32 {
debug!("emscripten::_dlclose");
-1
}
/// emscripten: dlsym(handle: *mut c_void, symbol: *const c_char) -> *mut c_void
pub extern "C" fn _dlsym(filepath: u32, symbol: u32) -> u32 {
pub extern "C" fn _dlsym(filepath: u32, symbol: u32, _ctx: &mut Ctx) -> u32 {
debug!("emscripten::_dlerror");
-1
}
/// emscripten: dlerror() -> *mut c_char
pub extern "C" fn _dlerror() -> u32 {
pub extern "C" fn _dlerror(_ctx: &mut Ctx) -> u32 {
debug!("emscripten::_dlerror");
-1
}

View File

@@ -1,22 +1,24 @@
use wasmer_runtime_core::vm::Ctx;
/// emscripten: _llvm_log10_f64
pub extern "C" fn _llvm_log10_f64(value: f64) -> f64 {
pub extern "C" fn _llvm_log10_f64(value: f64, _ctx: &mut Ctx) -> f64 {
debug!("emscripten::_llvm_log10_f64");
value.log10()
}
/// emscripten: _llvm_log2_f64
pub extern "C" fn _llvm_log2_f64(value: f64) -> f64 {
pub extern "C" fn _llvm_log2_f64(value: f64, _ctx: &mut Ctx) -> f64 {
debug!("emscripten::_llvm_log2_f64");
value.log2()
}
// emscripten: f64-rem
pub extern "C" fn f64_rem(x: f64, y: f64) -> f64 {
pub extern "C" fn f64_rem(x: f64, y: f64, _ctx: &mut Ctx) -> f64 {
debug!("emscripten::f64-rem");
x % y
}
// emscripten: global.Math pow
pub extern "C" fn pow(x: f64, y: f64) -> f64 {
pub extern "C" fn pow(x: f64, y: f64, _ctx: &mut Ctx) -> f64 {
x.powf(y)
}

View File

@@ -33,14 +33,14 @@ pub extern "C" fn enlarge_memory(_ctx: &mut Ctx) -> u32 {
}
/// emscripten: abortOnCannotGrowMemory
pub extern "C" fn abort_on_cannot_grow_memory() -> u32 {
pub extern "C" fn abort_on_cannot_grow_memory(_ctx: &mut Ctx) -> u32 {
debug!("emscripten::abort_on_cannot_grow_memory");
abort_with_message("Cannot enlarge memory arrays!");
0
}
/// emscripten: ___map_file
pub extern "C" fn ___map_file() -> c_int {
pub extern "C" fn ___map_file(_ctx: &mut Ctx) -> c_int {
debug!("emscripten::___map_file");
// NOTE: TODO: Em returns -1 here as well. May need to implement properly
-1

View File

@@ -41,25 +41,25 @@ pub extern "C" fn em_abort(message: u32, ctx: &mut Ctx) {
}
}
pub extern "C" fn abort_stack_overflow(_what: c_int) {
pub extern "C" fn abort_stack_overflow(_what: c_int, _ctx: &mut Ctx) {
debug!("emscripten::abort_stack_overflow");
// TODO: Message incomplete. Need to finish em runtime data first
abort_with_message("Stack overflow! Attempted to allocate some bytes on the stack");
}
pub extern "C" fn _llvm_trap() {
pub extern "C" fn _llvm_trap(_ctx: &mut Ctx) {
debug!("emscripten::_llvm_trap");
abort_with_message("abort!");
}
pub extern "C" fn _system() -> c_int {
pub extern "C" fn _system(_ctx: &mut Ctx) -> c_int {
debug!("emscripten::_system");
// TODO: May need to change this Em impl to a working version
eprintln!("Can't call external programs");
return EAGAIN;
}
pub extern "C" fn _popen() -> c_int {
pub extern "C" fn _popen(_ctx: &mut Ctx) -> c_int {
debug!("emscripten::_popen");
// TODO: May need to change this Em impl to a working version
eprintln!("Missing function: popen");