mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-18 03:11:21 +00:00
Fix all the imports to run nginx
This commit is contained in:
@ -11,6 +11,11 @@ use super::utils::{allocate_on_stack, copy_cstr_into_wasm, copy_terminated_array
|
||||
use super::EmscriptenData;
|
||||
use wasmer_runtime_core::vm::Ctx;
|
||||
|
||||
pub extern "C" fn _getaddrinfo(one: i32, two: i32, three: i32, four: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_getaddrinfo");
|
||||
-1
|
||||
}
|
||||
|
||||
// #[no_mangle]
|
||||
/// emscripten: _getenv // (name: *const char) -> *const c_char;
|
||||
pub extern "C" fn _getenv(name: c_int, ctx: &mut Ctx) -> u32 {
|
||||
|
@ -338,6 +338,7 @@ macro_rules! global {
|
||||
}
|
||||
|
||||
pub struct EmscriptenGlobalsData {
|
||||
abort: u64,
|
||||
// Env namespace
|
||||
stacktop: u64,
|
||||
stack_max: u64,
|
||||
@ -385,6 +386,7 @@ impl EmscriptenGlobals {
|
||||
let table_base = 0 as u64;
|
||||
let temp_double_ptr = 0 as u64;
|
||||
let data = EmscriptenGlobalsData {
|
||||
abort: 0, // TODO review usage
|
||||
// env
|
||||
stacktop: stacktop(STATIC_BUMP) as _,
|
||||
stack_max: stack_max(STATIC_BUMP) as _,
|
||||
@ -448,8 +450,8 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
ctx: null_ctx,
|
||||
table: Table {
|
||||
ty: ElementType::Anyfunc,
|
||||
min: 10,
|
||||
max: Some(10),
|
||||
min: 8192,
|
||||
max: Some(8192),
|
||||
},
|
||||
},
|
||||
);
|
||||
@ -509,6 +511,17 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"ABORT".to_string(),
|
||||
Export::Global {
|
||||
local: global!(globals.data.abort),
|
||||
global: GlobalDesc {
|
||||
mutable: false,
|
||||
ty: I32,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"memoryBase".to_string(),
|
||||
Export::Global {
|
||||
@ -826,7 +839,19 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
func: func!(syscalls, ___syscall20),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![],
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall220",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall220),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
@ -856,6 +881,18 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall10",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall10),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall54",
|
||||
Export::Function {
|
||||
@ -892,13 +929,25 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall85",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall85),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall64",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall64),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![],
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
@ -1054,7 +1103,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
func: func!(syscalls, ___syscall201),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![],
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
@ -1246,7 +1295,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
func: func!(signal, _sigprocmask),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![],
|
||||
params: vec![I32, I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
@ -1746,71 +1795,479 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
},
|
||||
);
|
||||
|
||||
mock_external!(env_namespace, _waitpid);
|
||||
mock_external!(env_namespace, _utimes);
|
||||
mock_external!(env_namespace, _usleep);
|
||||
env_namespace.insert(
|
||||
"___syscall110",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall110),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall15",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall15),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall168",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall168),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall191",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall191),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
env_namespace.insert(
|
||||
"___syscall194",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall194),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
env_namespace.insert(
|
||||
"___syscall196",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall196),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
env_namespace.insert(
|
||||
"___syscall199",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall199),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall268",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall268),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall272",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall272),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall295",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall295),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall300",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall300),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall334",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall334),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall38",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall38),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall60",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall60),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall66",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall66),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall75",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall75),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall91",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall91),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"___syscall97",
|
||||
Export::Function {
|
||||
func: func!(syscalls, ___syscall97),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_endgrent",
|
||||
Export::Function {
|
||||
func: func!(process, _endgrent),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![],
|
||||
returns: vec![],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_execve",
|
||||
Export::Function {
|
||||
func: func!(process, _execve),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_getaddrinfo",
|
||||
Export::Function {
|
||||
func: func!(env, _getaddrinfo),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32, I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_gmtime_r",
|
||||
Export::Function {
|
||||
func: func!(time, _gmtime_r),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_kill",
|
||||
Export::Function {
|
||||
func: func!(process, _kill),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_llvm_stackrestore",
|
||||
Export::Function {
|
||||
func: func!(process, _llvm_stackrestore),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32],
|
||||
returns: vec![],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_mktime",
|
||||
Export::Function {
|
||||
func: func!(time, _mktime),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_raise",
|
||||
Export::Function {
|
||||
func: func!(process, _raise),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_sem_init",
|
||||
Export::Function {
|
||||
func: func!(process, _sem_init),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_sem_post",
|
||||
Export::Function {
|
||||
func: func!(process, _sem_post),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_sem_wait",
|
||||
Export::Function {
|
||||
func: func!(process, _sem_wait),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_setgrent",
|
||||
Export::Function {
|
||||
func: func!(process, _setgrent),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![],
|
||||
returns: vec![],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_setgroups",
|
||||
Export::Function {
|
||||
func: func!(process, _setgroups),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_setitimer",
|
||||
Export::Function {
|
||||
func: func!(process, _setitimer),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
//
|
||||
env_namespace.insert(
|
||||
"_sigsuspend",
|
||||
Export::Function {
|
||||
func: func!(signal, _sigsuspend),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_setitimer",
|
||||
Export::Function {
|
||||
func: func!(process, _setitimer),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_usleep",
|
||||
Export::Function {
|
||||
func: func!(process, _usleep),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_utimes",
|
||||
Export::Function {
|
||||
func: func!(process, _utimes),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
env_namespace.insert(
|
||||
"_waitpid",
|
||||
Export::Function {
|
||||
func: func!(process, _waitpid),
|
||||
ctx: Context::Internal,
|
||||
signature: FuncSig {
|
||||
params: vec![I32, I32, I32],
|
||||
returns: vec![I32],
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
// mock_external!(env_namespace, _time);
|
||||
// mock_external!(env_namespace, _sysconf);
|
||||
// mock_external!(env_namespace, _strftime);
|
||||
mock_external!(env_namespace, _sigsuspend);
|
||||
// mock_external!(env_namespace, _sigprocmask);
|
||||
// mock_external!(env_namespace, _sigemptyset);
|
||||
// mock_external!(env_namespace, _sigaddset);
|
||||
// mock_external!(env_namespace, _sigaction);
|
||||
mock_external!(env_namespace, _setitimer);
|
||||
mock_external!(env_namespace, _setgroups);
|
||||
mock_external!(env_namespace, _setgrent);
|
||||
mock_external!(env_namespace, _sem_wait);
|
||||
mock_external!(env_namespace, _sem_post);
|
||||
mock_external!(env_namespace, _sem_init);
|
||||
|
||||
mock_external!(env_namespace, _sched_yield);
|
||||
mock_external!(env_namespace, _raise);
|
||||
mock_external!(env_namespace, _mktime);
|
||||
// mock_external!(env_namespace, _localtime_r);
|
||||
// mock_external!(env_namespace, _localtime);
|
||||
mock_external!(env_namespace, _llvm_stacksave);
|
||||
mock_external!(env_namespace, _llvm_stackrestore);
|
||||
mock_external!(env_namespace, _kill);
|
||||
mock_external!(env_namespace, _gmtime_r);
|
||||
// mock_external!(env_namespace, _gettimeofday);
|
||||
// mock_external!(env_namespace, _getpagesize);
|
||||
mock_external!(env_namespace, _getgrent);
|
||||
mock_external!(env_namespace, _getaddrinfo);
|
||||
// mock_external!(env_namespace, _fork);
|
||||
// mock_external!(env_namespace, _exit);
|
||||
mock_external!(env_namespace, _execve);
|
||||
mock_external!(env_namespace, _endgrent);
|
||||
// mock_external!(env_namespace, _clock_gettime);
|
||||
mock_external!(env_namespace, ___syscall97);
|
||||
mock_external!(env_namespace, ___syscall91);
|
||||
mock_external!(env_namespace, ___syscall85);
|
||||
mock_external!(env_namespace, ___syscall75);
|
||||
mock_external!(env_namespace, ___syscall66);
|
||||
// mock_external!(env_namespace, ___syscall64);
|
||||
// mock_external!(env_namespace, ___syscall63);
|
||||
// mock_external!(env_namespace, ___syscall60);
|
||||
// mock_external!(env_namespace, ___syscall54);
|
||||
// mock_external!(env_namespace, ___syscall39);
|
||||
mock_external!(env_namespace, ___syscall38);
|
||||
// mock_external!(env_namespace, ___syscall340);
|
||||
mock_external!(env_namespace, ___syscall334);
|
||||
mock_external!(env_namespace, ___syscall300);
|
||||
mock_external!(env_namespace, ___syscall295);
|
||||
mock_external!(env_namespace, ___syscall272);
|
||||
mock_external!(env_namespace, ___syscall268);
|
||||
// mock_external!(env_namespace, ___syscall221);
|
||||
mock_external!(env_namespace, ___syscall220);
|
||||
// mock_external!(env_namespace, ___syscall212);
|
||||
// mock_external!(env_namespace, ___syscall201);
|
||||
mock_external!(env_namespace, ___syscall199);
|
||||
// mock_external!(env_namespace, ___syscall197);
|
||||
mock_external!(env_namespace, ___syscall196);
|
||||
// mock_external!(env_namespace, ___syscall195);
|
||||
mock_external!(env_namespace, ___syscall194);
|
||||
mock_external!(env_namespace, ___syscall191);
|
||||
// mock_external!(env_namespace, ___syscall181);
|
||||
// mock_external!(env_namespace, ___syscall180);
|
||||
mock_external!(env_namespace, ___syscall168);
|
||||
// mock_external!(env_namespace, ___syscall146);
|
||||
// mock_external!(env_namespace, ___syscall145);
|
||||
// mock_external!(env_namespace, ___syscall142);
|
||||
@ -1818,8 +2275,6 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
|
||||
// mock_external!(env_namespace, ___syscall122);
|
||||
// mock_external!(env_namespace, ___syscall102);
|
||||
// mock_external!(env_namespace, ___syscall20);
|
||||
mock_external!(env_namespace, ___syscall15);
|
||||
mock_external!(env_namespace, ___syscall10);
|
||||
mock_external!(env_namespace, _dlopen);
|
||||
mock_external!(env_namespace, _dlclose);
|
||||
mock_external!(env_namespace, _dlsym);
|
||||
|
@ -24,6 +24,15 @@ pub extern "C" fn _fork(_ctx: &mut Ctx) -> pid_t {
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _endgrent(_ctx: &mut Ctx) {
|
||||
debug!("emscripten::_endgrent");
|
||||
}
|
||||
|
||||
pub extern "C" fn _execve(one: i32, two: i32, three: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_execve");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _exit(status: c_int, _ctx: &mut Ctx) -> ! {
|
||||
debug!("emscripten::_exit {}", status);
|
||||
unsafe { exit(status) }
|
||||
@ -41,6 +50,64 @@ pub extern "C" fn em_abort(message: u32, ctx: &mut Ctx) {
|
||||
}
|
||||
}
|
||||
|
||||
pub extern "C" fn _kill(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_kill");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _llvm_stackrestore(one: i32, ctx: &mut Ctx) {
|
||||
debug!("emscripten::_llvm_stackrestore");
|
||||
}
|
||||
|
||||
pub extern "C" fn _raise(one: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_raise");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _sem_init(one: i32, two: i32, three: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_sem_init");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _sem_post(one: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_sem_post");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _sem_wait(one: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_sem_post");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _setgrent(ctx: &mut Ctx) {
|
||||
debug!("emscripten::_setgrent");
|
||||
}
|
||||
|
||||
pub extern "C" fn _setgroups(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_setgroups");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _setitimer(one: i32, two: i32, three: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_setitimer");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _usleep(one: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_usleep");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _utimes(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_utimes");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _waitpid(one: i32, two: i32, three: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_waitpid");
|
||||
-1
|
||||
}
|
||||
|
||||
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
|
||||
|
@ -26,7 +26,12 @@ pub extern "C" fn _sigaddset(set: u32, signum: u32, ctx: &mut Ctx) -> i32 {
|
||||
0
|
||||
}
|
||||
|
||||
pub extern "C" fn _sigprocmask() -> i32 {
|
||||
pub extern "C" fn _sigsuspend(one: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_sigsuspend");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _sigprocmask(one: i32, two: i32, three: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_sigprocmask");
|
||||
0
|
||||
}
|
||||
|
@ -165,12 +165,27 @@ pub extern "C" fn ___syscall12(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx
|
||||
}
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall10(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall10");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall15(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall15");
|
||||
-1
|
||||
}
|
||||
|
||||
// getpid
|
||||
pub extern "C" fn ___syscall20() -> pid_t {
|
||||
pub extern "C" fn ___syscall20(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall20 (getpid)");
|
||||
unsafe { getpid() }
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall38(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall38");
|
||||
-1
|
||||
}
|
||||
|
||||
// mkdir
|
||||
pub extern "C" fn ___syscall39(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx) -> c_int {
|
||||
debug!("emscripten::___syscall39 (mkdir) {}", which);
|
||||
@ -238,6 +253,11 @@ pub extern "C" fn ___syscall57(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx
|
||||
unsafe { setpgid(pid, pgid) }
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall60(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall60");
|
||||
-1
|
||||
}
|
||||
|
||||
// dup2
|
||||
pub extern "C" fn ___syscall63(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx) -> c_int {
|
||||
debug!("emscripten::___syscall63 (dup2) {}", which);
|
||||
@ -249,11 +269,36 @@ pub extern "C" fn ___syscall63(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx
|
||||
}
|
||||
|
||||
// getppid
|
||||
pub extern "C" fn ___syscall64() -> pid_t {
|
||||
pub extern "C" fn ___syscall64(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall64 (getppid)");
|
||||
unsafe { getpid() }
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall66(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall66");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall75(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall75");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall85(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall85");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall91(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall91");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall97(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall97");
|
||||
-1
|
||||
}
|
||||
|
||||
// socketcall
|
||||
#[allow(clippy::cast_ptr_alignment)]
|
||||
pub extern "C" fn ___syscall102(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx) -> c_int {
|
||||
@ -507,6 +552,11 @@ pub extern "C" fn ___syscall102(which: c_int, mut varargs: VarArgs, ctx: &mut Ct
|
||||
}
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall110(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall110");
|
||||
-1
|
||||
}
|
||||
|
||||
/// wait4
|
||||
#[allow(clippy::cast_ptr_alignment)]
|
||||
pub extern "C" fn ___syscall114(_which: c_int, mut varargs: VarArgs, ctx: &mut Ctx) -> pid_t {
|
||||
@ -668,6 +718,11 @@ pub extern "C" fn ___syscall146(which: c_int, mut varargs: VarArgs, ctx: &mut Ct
|
||||
}
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall168(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall168");
|
||||
-1
|
||||
}
|
||||
|
||||
// pread
|
||||
pub extern "C" fn ___syscall180(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx) -> c_int {
|
||||
debug!("emscripten::___syscall180 (pread) {}", which);
|
||||
@ -706,6 +761,26 @@ pub extern "C" fn ___syscall181(which: c_int, mut varargs: VarArgs, ctx: &mut Ct
|
||||
status
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall191(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall191 - stub");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall194(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall194 - stub");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall196(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall194 - stub");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall199(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall199 - stub");
|
||||
-1
|
||||
}
|
||||
|
||||
// stat64
|
||||
pub extern "C" fn ___syscall195(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx) -> c_int {
|
||||
debug!("emscripten::___syscall195 (stat64) {}", which);
|
||||
@ -746,11 +821,11 @@ pub extern "C" fn ___syscall197(which: c_int, mut varargs: VarArgs, ctx: &mut Ct
|
||||
}
|
||||
|
||||
// getgid
|
||||
pub extern "C" fn ___syscall201() -> gid_t {
|
||||
pub extern "C" fn ___syscall201(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall201 (getgid)");
|
||||
unsafe {
|
||||
// Maybe fix: Emscripten returns 0 always
|
||||
getgid()
|
||||
getgid() as i32
|
||||
}
|
||||
}
|
||||
|
||||
@ -776,6 +851,11 @@ pub extern "C" fn ___syscall212(which: c_int, mut varargs: VarArgs, ctx: &mut Ct
|
||||
unsafe { chown(pathname_addr, owner, group) }
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall220(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall220");
|
||||
-1
|
||||
}
|
||||
|
||||
// fcntl64
|
||||
pub extern "C" fn ___syscall221(which: c_int, mut varargs: VarArgs, ctx: &mut Ctx) -> c_int {
|
||||
debug!("emscripten::___syscall221 (fcntl64) {}", which);
|
||||
@ -788,6 +868,31 @@ pub extern "C" fn ___syscall221(which: c_int, mut varargs: VarArgs, ctx: &mut Ct
|
||||
}
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall268(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall268");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall272(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall272");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall295(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall295");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall300(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall300");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn ___syscall334(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::___syscall334");
|
||||
-1
|
||||
}
|
||||
|
||||
/// dup3
|
||||
pub extern "C" fn ___syscall330(_which: c_int, mut varargs: VarArgs, ctx: &mut Ctx) -> pid_t {
|
||||
// Implementation based on description at https://linux.die.net/man/2/dup3
|
||||
|
@ -99,6 +99,16 @@ pub extern "C" fn _difftime(t0: u32, t1: u32) -> c_int {
|
||||
(t0 - t1) as _
|
||||
}
|
||||
|
||||
pub extern "C" fn _gmtime_r(one: i32, two: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_gmtime_r");
|
||||
-1
|
||||
}
|
||||
|
||||
pub extern "C" fn _mktime(one: i32, ctx: &mut Ctx) -> i32 {
|
||||
debug!("emscripten::_mktime");
|
||||
-1
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
struct guest_tm {
|
||||
pub tm_sec: c_int, // 0
|
||||
|
Reference in New Issue
Block a user