Use WasmExternType for VarArgs

This commit is contained in:
Lachlan Sneff
2019-02-01 13:18:43 -08:00
parent 79c4566165
commit 631fc8d124
2 changed files with 37 additions and 28 deletions

View File

@ -329,6 +329,7 @@ impl EmscriptenGlobals {
}
pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject {
use crate::varargs::VarArgs;
let mut imports = ImportObject::new();
let mut env_namespace = Namespace::new();
let mut asm_namespace = Namespace::new();
@ -400,58 +401,58 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
"nullFunc_viiiiii" => func!(crate::nullfunc::nullfunc_viiiiii, [u32] -> []),
// Syscalls
"___syscall1" => func!(crate::syscalls::___syscall1, [i32, i32] -> []),
"___syscall3" => func!(crate::syscalls::___syscall3, [i32, i32] -> [i32]),
"___syscall4" => func!(crate::syscalls::___syscall4, [i32, i32] -> [i32]),
"___syscall5" => func!(crate::syscalls::___syscall5, [i32, i32] -> [i32]),
"___syscall6" => func!(crate::syscalls::___syscall6, [i32, i32] -> [i32]),
"___syscall1" => func!(crate::syscalls::___syscall1, [i32, VarArgs] -> []),
"___syscall3" => func!(crate::syscalls::___syscall3, [i32, VarArgs] -> [i32]),
"___syscall4" => func!(crate::syscalls::___syscall4, [i32, VarArgs] -> [i32]),
"___syscall5" => func!(crate::syscalls::___syscall5, [i32, VarArgs] -> [i32]),
"___syscall6" => func!(crate::syscalls::___syscall6, [i32, VarArgs] -> [i32]),
"___syscall10" => func!(crate::syscalls::___syscall10, [i32, i32] -> [i32]),
"___syscall12" => func!(crate::syscalls::___syscall12, [i32, i32] -> [i32]),
"___syscall12" => func!(crate::syscalls::___syscall12, [i32, VarArgs] -> [i32]),
"___syscall15" => func!(crate::syscalls::___syscall15, [i32, i32] -> [i32]),
"___syscall20" => func!(crate::syscalls::___syscall20, [i32, i32] -> [i32]),
"___syscall39" => func!(crate::syscalls::___syscall39, [i32, i32] -> [i32]),
"___syscall39" => func!(crate::syscalls::___syscall39, [i32, VarArgs] -> [i32]),
"___syscall38" => func!(crate::syscalls::___syscall38, [i32, i32] -> [i32]),
"___syscall40" => func!(crate::syscalls::___syscall40, [i32, i32] -> [i32]),
"___syscall54" => func!(crate::syscalls::___syscall54, [i32, i32] -> [i32]),
"___syscall57" => func!(crate::syscalls::___syscall57, [i32, i32] -> [i32]),
"___syscall40" => func!(crate::syscalls::___syscall40, [i32, VarArgs] -> [i32]),
"___syscall54" => func!(crate::syscalls::___syscall54, [i32, VarArgs] -> [i32]),
"___syscall57" => func!(crate::syscalls::___syscall57, [i32, VarArgs] -> [i32]),
"___syscall60" => func!(crate::syscalls::___syscall60, [i32, i32] -> [i32]),
"___syscall63" => func!(crate::syscalls::___syscall63, [i32, i32] -> [i32]),
"___syscall63" => func!(crate::syscalls::___syscall63, [i32, VarArgs] -> [i32]),
"___syscall64" => func!(crate::syscalls::___syscall64, [i32, i32] -> [i32]),
"___syscall66" => func!(crate::syscalls::___syscall66, [i32, i32] -> [i32]),
"___syscall75" => func!(crate::syscalls::___syscall75, [i32, i32] -> [i32]),
"___syscall85" => func!(crate::syscalls::___syscall85, [i32, i32] -> [i32]),
"___syscall91" => func!(crate::syscalls::___syscall91, [i32, i32] -> [i32]),
"___syscall97" => func!(crate::syscalls::___syscall97, [i32, i32] -> [i32]),
"___syscall102" => func!(crate::syscalls::___syscall102, [i32, i32] -> [i32]),
"___syscall102" => func!(crate::syscalls::___syscall102, [i32, VarArgs] -> [i32]),
"___syscall110" => func!(crate::syscalls::___syscall110, [i32, i32] -> [i32]),
"___syscall114" => func!(crate::syscalls::___syscall114, [i32, i32] -> [i32]),
"___syscall122" => func!(crate::syscalls::___syscall122, [i32, i32] -> [i32]),
"___syscall140" => func!(crate::syscalls::___syscall140, [i32, i32] -> [i32]),
"___syscall142" => func!(crate::syscalls::___syscall142, [i32, i32] -> [i32]),
"___syscall145" => func!(crate::syscalls::___syscall145, [i32, i32] -> [i32]),
"___syscall146" => func!(crate::syscalls::___syscall146, [i32, i32] -> [i32]),
"___syscall114" => func!(crate::syscalls::___syscall114, [i32, VarArgs] -> [i32]),
"___syscall122" => func!(crate::syscalls::___syscall122, [i32, VarArgs] -> [i32]),
"___syscall140" => func!(crate::syscalls::___syscall140, [i32, VarArgs] -> [i32]),
"___syscall142" => func!(crate::syscalls::___syscall142, [i32, VarArgs] -> [i32]),
"___syscall145" => func!(crate::syscalls::___syscall145, [i32, VarArgs] -> [i32]),
"___syscall146" => func!(crate::syscalls::___syscall146, [i32, VarArgs] -> [i32]),
"___syscall168" => func!(crate::syscalls::___syscall168, [i32, i32] -> [i32]),
"___syscall180" => func!(crate::syscalls::___syscall180, [i32, i32] -> [i32]),
"___syscall181" => func!(crate::syscalls::___syscall181, [i32, i32] -> [i32]),
"___syscall180" => func!(crate::syscalls::___syscall180, [i32, VarArgs] -> [i32]),
"___syscall181" => func!(crate::syscalls::___syscall181, [i32, VarArgs] -> [i32]),
"___syscall191" => func!(crate::syscalls::___syscall191, [i32, i32] -> [i32]),
"___syscall192" => func!(crate::syscalls::___syscall192, [i32, i32] -> [i32]),
"___syscall192" => func!(crate::syscalls::___syscall192, [i32, VarArgs] -> [i32]),
"___syscall194" => func!(crate::syscalls::___syscall194, [i32, i32] -> [i32]),
"___syscall195" => func!(crate::syscalls::___syscall195, [i32, i32] -> [i32]),
"___syscall195" => func!(crate::syscalls::___syscall195, [i32, VarArgs] -> [i32]),
"___syscall196" => func!(crate::syscalls::___syscall196, [i32, i32] -> [i32]),
"___syscall197" => func!(crate::syscalls::___syscall197, [i32, i32] -> [i32]),
"___syscall197" => func!(crate::syscalls::___syscall197, [i32, VarArgs] -> [i32]),
"___syscall199" => func!(crate::syscalls::___syscall199, [i32, i32] -> [i32]),
"___syscall201" => func!(crate::syscalls::___syscall201, [i32, i32] -> [i32]),
"___syscall202" => func!(crate::syscalls::___syscall202, [i32, i32] -> [i32]),
"___syscall212" => func!(crate::syscalls::___syscall212, [i32, i32] -> [i32]),
"___syscall212" => func!(crate::syscalls::___syscall212, [i32, VarArgs] -> [i32]),
"___syscall220" => func!(crate::syscalls::___syscall220, [i32, i32] -> [i32]),
"___syscall221" => func!(crate::syscalls::___syscall221, [i32, i32] -> [i32]),
"___syscall221" => func!(crate::syscalls::___syscall221, [i32, VarArgs] -> [i32]),
"___syscall268" => func!(crate::syscalls::___syscall268, [i32, i32] -> [i32]),
"___syscall272" => func!(crate::syscalls::___syscall272, [i32, i32] -> [i32]),
"___syscall295" => func!(crate::syscalls::___syscall295, [i32, i32] -> [i32]),
"___syscall300" => func!(crate::syscalls::___syscall300, [i32, i32] -> [i32]),
"___syscall330" => func!(crate::syscalls::___syscall330, [i32, i32] -> [i32]),
"___syscall330" => func!(crate::syscalls::___syscall330, [i32, VarArgs] -> [i32]),
"___syscall334" => func!(crate::syscalls::___syscall334, [i32, i32] -> [i32]),
"___syscall340" => func!(crate::syscalls::___syscall340, [i32, i32] -> [i32]),
"___syscall340" => func!(crate::syscalls::___syscall340, [i32, VarArgs] -> [i32]),
// Process
"abort" => func!(crate::process::em_abort, [u32] -> []),

View File

@ -1,7 +1,11 @@
use std::mem;
use wasmer_runtime_core::vm::Ctx;
use wasmer_runtime_core::{
vm::Ctx,
types::{Type, WasmExternType},
};
#[repr(transparent)]
#[derive(Copy, Clone)]
pub struct VarArgs {
pub pointer: u32, // assuming 32bit wasm
}
@ -13,3 +17,7 @@ impl VarArgs {
unsafe { (ptr as *const T).read() }
}
}
unsafe impl WasmExternType for VarArgs {
const TYPE: Type = Type::I32;
}