mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-13 22:25:40 +00:00
Move some functions to utils
This commit is contained in:
parent
b1ba24e99d
commit
3f819e3a79
@ -133,6 +133,16 @@ pub fn generate_emscripten_env<'a, 'b>() -> ImportObject<&'a str, &'b str> {
|
|||||||
"_getenv",
|
"_getenv",
|
||||||
ImportValue::Func(env::_getenv as *const u8),
|
ImportValue::Func(env::_getenv as *const u8),
|
||||||
);
|
);
|
||||||
|
import_object.set(
|
||||||
|
"env",
|
||||||
|
"_getpwnam",
|
||||||
|
ImportValue::Func(env::_getpwnam as _),
|
||||||
|
);
|
||||||
|
import_object.set(
|
||||||
|
"env",
|
||||||
|
"_getgrnam",
|
||||||
|
ImportValue::Func(env::_getgrnam as _),
|
||||||
|
);
|
||||||
// Errno
|
// Errno
|
||||||
import_object.set(
|
import_object.set(
|
||||||
"env",
|
"env",
|
||||||
@ -273,18 +283,7 @@ pub fn generate_emscripten_env<'a, 'b>() -> ImportObject<&'a str, &'b str> {
|
|||||||
"nullFunc_viiii",
|
"nullFunc_viiii",
|
||||||
ImportValue::Func(nullfunc::nullfunc_viiii as *const u8),
|
ImportValue::Func(nullfunc::nullfunc_viiii as *const u8),
|
||||||
);
|
);
|
||||||
|
// Time
|
||||||
// named syscalls
|
|
||||||
import_object.set(
|
|
||||||
"env",
|
|
||||||
"_getpwnam",
|
|
||||||
ImportValue::Func(env::_getpwnam as _),
|
|
||||||
);
|
|
||||||
import_object.set(
|
|
||||||
"env",
|
|
||||||
"_getgrnam",
|
|
||||||
ImportValue::Func(env::_getgrnam as _),
|
|
||||||
);
|
|
||||||
import_object.set(
|
import_object.set(
|
||||||
"env",
|
"env",
|
||||||
"_gettimeofday",
|
"_gettimeofday",
|
||||||
@ -295,10 +294,20 @@ pub fn generate_emscripten_env<'a, 'b>() -> ImportObject<&'a str, &'b str> {
|
|||||||
"_clock_gettime",
|
"_clock_gettime",
|
||||||
ImportValue::Func(time::_clock_gettime as _),
|
ImportValue::Func(time::_clock_gettime as _),
|
||||||
);
|
);
|
||||||
|
import_object.set(
|
||||||
|
"env",
|
||||||
|
"_localtime",
|
||||||
|
ImportValue::Func(time::_localtime as _),
|
||||||
|
);
|
||||||
|
import_object.set(
|
||||||
|
"env",
|
||||||
|
"_time",
|
||||||
|
ImportValue::Func(time::_time as _),
|
||||||
|
);
|
||||||
mock_external!(import_object, _waitpid);
|
mock_external!(import_object, _waitpid);
|
||||||
mock_external!(import_object, _utimes);
|
mock_external!(import_object, _utimes);
|
||||||
mock_external!(import_object, _usleep);
|
mock_external!(import_object, _usleep);
|
||||||
mock_external!(import_object, _time);
|
// mock_external!(import_object, _time);
|
||||||
mock_external!(import_object, _sysconf);
|
mock_external!(import_object, _sysconf);
|
||||||
mock_external!(import_object, _strftime);
|
mock_external!(import_object, _strftime);
|
||||||
mock_external!(import_object, _sigsuspend);
|
mock_external!(import_object, _sigsuspend);
|
||||||
@ -316,7 +325,7 @@ pub fn generate_emscripten_env<'a, 'b>() -> ImportObject<&'a str, &'b str> {
|
|||||||
mock_external!(import_object, _raise);
|
mock_external!(import_object, _raise);
|
||||||
mock_external!(import_object, _mktime);
|
mock_external!(import_object, _mktime);
|
||||||
mock_external!(import_object, _localtime_r);
|
mock_external!(import_object, _localtime_r);
|
||||||
mock_external!(import_object, _localtime);
|
// mock_external!(import_object, _localtime);
|
||||||
mock_external!(import_object, _llvm_stacksave);
|
mock_external!(import_object, _llvm_stacksave);
|
||||||
mock_external!(import_object, _llvm_stackrestore);
|
mock_external!(import_object, _llvm_stackrestore);
|
||||||
mock_external!(import_object, _kill);
|
mock_external!(import_object, _kill);
|
||||||
|
@ -1,5 +1,16 @@
|
|||||||
use libc::{gettimeofday, timeval, c_int, clock_gettime, clockid_t, timespec};
|
use libc::{
|
||||||
use std::ptr;
|
gettimeofday,
|
||||||
|
timeval,
|
||||||
|
c_int,
|
||||||
|
clock_gettime,
|
||||||
|
clockid_t,
|
||||||
|
timespec,
|
||||||
|
tm,
|
||||||
|
localtime,
|
||||||
|
time_t,
|
||||||
|
time
|
||||||
|
};
|
||||||
|
use std::{ptr, slice, mem};
|
||||||
|
|
||||||
use crate::webassembly::Instance;
|
use crate::webassembly::Instance;
|
||||||
|
|
||||||
@ -30,3 +41,23 @@ pub extern "C" fn _clock_gettime(clk_id: clockid_t, tp_offset: c_int, instance:
|
|||||||
returned
|
returned
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// emscripten: _localtime
|
||||||
|
pub extern "C" fn _localtime(time_p: u32, instance: &mut Instance) -> *mut tm {
|
||||||
|
debug!("emscripten::_localtime {}", time_p);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let time_p_addr = instance.memory_offset_addr(0, time_p as _) as *mut i64;
|
||||||
|
localtime(time_p_addr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// emscripten: _time
|
||||||
|
pub extern "C" fn _time(time_p: u32, instance: &mut Instance) -> time_t {
|
||||||
|
debug!("emscripten::_time {}", time_p);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let time_p_addr = instance.memory_offset_addr(0, time_p as _) as *mut i64;
|
||||||
|
time(time_p_addr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
use crate::webassembly::module::Module;
|
use crate::webassembly::module::Module;
|
||||||
|
use std::ffi::CStr;
|
||||||
|
use std::os::raw::c_char;
|
||||||
|
use std::{slice, mem};
|
||||||
|
|
||||||
|
use crate::webassembly::Instance;
|
||||||
|
|
||||||
/// We check if a provided module is an Emscripten generated one
|
/// We check if a provided module is an Emscripten generated one
|
||||||
pub fn is_emscripten_module(module: &Module) -> bool {
|
pub fn is_emscripten_module(module: &Module) -> bool {
|
||||||
@ -10,6 +15,33 @@ pub fn is_emscripten_module(module: &Module) -> bool {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub unsafe fn copy_cstr_into_wasm(instance: &mut Instance, cstr: *const c_char) -> u32 {
|
||||||
|
let s = CStr::from_ptr(cstr).to_str().unwrap();
|
||||||
|
let space_offset = (instance.emscripten_data.malloc)(s.len() as _, instance);
|
||||||
|
let raw_memory = instance.memory_offset_addr(0, space_offset as _) as *mut u8;
|
||||||
|
let mut slice = slice::from_raw_parts_mut(raw_memory, s.len());
|
||||||
|
|
||||||
|
for (byte, loc) in s.bytes().zip(slice.iter_mut()) {
|
||||||
|
*loc = byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
space_offset
|
||||||
|
}
|
||||||
|
|
||||||
|
pub unsafe fn copy_terminated_array_of_cstrs(instance: &mut Instance, cstrs: *mut *mut c_char) -> u32 {
|
||||||
|
let total_num = {
|
||||||
|
let mut ptr = cstrs;
|
||||||
|
let mut counter = 0;
|
||||||
|
while !(*ptr).is_null() {
|
||||||
|
counter += 1;
|
||||||
|
ptr = ptr.add(1);
|
||||||
|
}
|
||||||
|
counter
|
||||||
|
};
|
||||||
|
println!("total_num: {}", total_num);
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::super::generate_emscripten_env;
|
use super::super::generate_emscripten_env;
|
||||||
|
Loading…
Reference in New Issue
Block a user