Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add syscalls for sqlite3 #289

Merged
merged 8 commits into from
Mar 26, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

68 changes: 68 additions & 0 deletions lib/emscripten/src/emscripten_target.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,14 @@ pub fn _pthread_cond_destroy(_ctx: &mut Ctx, _a: i32) -> i32 {
debug!("emscripten::_pthread_cond_destroy");
0
}
pub fn _pthread_create(_ctx: &mut Ctx, _a: i32, _b: i32, _c: i32, _d: i32) -> i32 {
debug!("emscripten::_pthread_create");
0
}
pub fn _pthread_join(_ctx: &mut Ctx, _a: i32, _b: i32) -> i32 {
debug!("emscripten::_pthread_join");
0
}
pub fn _pthread_cond_init(_ctx: &mut Ctx, _a: i32, _b: i32) -> i32 {
debug!("emscripten::_pthread_cond_init");
0
Expand Down Expand Up @@ -236,6 +244,9 @@ pub fn _getloadavg(_ctx: &mut Ctx, _loadavg: i32, _nelem: i32) -> i32 {
0
}
// round 2
pub fn nullFunc_di(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_di");
}
pub fn nullFunc_dii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_dii");
}
Expand All @@ -245,21 +256,72 @@ pub fn nullFunc_diiii(_ctx: &mut Ctx, _index: i32) {
pub fn nullFunc_iiji(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiji");
}
pub fn nullFunc_iiid(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiid");
}
pub fn nullFunc_iij(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iij");
}
pub fn nullFunc_iiiiiiiii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiiiiiiii");
}
pub fn nullFunc_iiiiiiiiiii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiiiiiiiiii");
}
pub fn nullFunc_iiiiijii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiiiijii");
}
pub fn nullFunc_iiiijii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiiijii");
}
pub fn nullFunc_iiiij(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiiij");
}
pub fn nullFunc_iiij(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiij");
}
pub fn nullFunc_iijii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iijii");
}
pub fn nullFunc_iijj(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iijj");
}
pub fn nullFunc_iiiiji(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_iiiiji");
}
pub fn nullFunc_ij(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_ij");
}
pub fn nullFunc_j(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_j");
}
pub fn nullFunc_jij(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_jij");
}
pub fn nullFunc_jj(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_jj");
}
pub fn nullFunc_jjj(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_jjj");
}
pub fn nullFunc_jii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_jii");
}
pub fn nullFunc_jiij(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_jiij");
}
pub fn nullFunc_vd(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_vd");
}
pub fn nullFunc_vid(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_vid");
}
pub fn nullFunc_viiiiiii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_viiiiiii");
}
pub fn nullFunc_viiiij(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_viiiij");
}
pub fn nullFunc_viiiiiiii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_viiiiiiii");
}
Expand All @@ -278,9 +340,15 @@ pub fn nullFunc_viiijiiiiii(_ctx: &mut Ctx, _index: i32) {
pub fn nullFunc_viij(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_viij");
}
pub fn nullFunc_viijii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_viijii");
}
pub fn nullFunc_viiji(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_viiji");
}
pub fn nullFunc_vijii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_vijii");
}
pub fn nullFunc_viijiii(_ctx: &mut Ctx, _index: i32) {
debug!("emscripten::nullFunc_viijiii");
}
Expand Down
6 changes: 0 additions & 6 deletions lib/emscripten/src/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,6 @@ pub fn getprotobynumber(_ctx: &mut Ctx, _one: i32) -> i32 {
unimplemented!()
}

/// getpwuid
pub fn getpwuid(_ctx: &mut Ctx, _uid: i32) -> i32 {
debug!("emscripten::getpwuid");
unimplemented!()
}

/// sigdelset
pub fn sigdelset(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
debug!("emscripten::sigdelset");
Expand Down
6 changes: 6 additions & 0 deletions lib/emscripten/src/io/unix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,9 @@ pub fn chroot(ctx: &mut Ctx, name_ptr: i32) -> i32 {
let name = emscripten_memory_pointer!(ctx.memory(0), name_ptr) as *const i8;
unsafe { _chroot(name) }
}

/// getpwuid
pub fn getpwuid(_ctx: &mut Ctx, _uid: i32) -> i32 {
debug!("emscripten::getpwuid");
0
}
6 changes: 6 additions & 0 deletions lib/emscripten/src/io/windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,9 @@ pub fn chroot(ctx: &mut Ctx, name_ptr: i32) -> i32 {
debug!("emscripten::chroot");
unimplemented!()
}

/// getpwuid
pub fn getpwuid(_ctx: &mut Ctx, uid: i32) -> i32 {
debug!("emscripten::getpwuid");
unimplemented!()
}
27 changes: 27 additions & 0 deletions lib/emscripten/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -504,15 +504,18 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
"___syscall83" => func!(crate::syscalls::___syscall83),
"___syscall85" => func!(crate::syscalls::___syscall85),
"___syscall91" => func!(crate::syscalls::___syscall191),
"___syscall94" => func!(crate::syscalls::___syscall194),
"___syscall97" => func!(crate::syscalls::___syscall97),
"___syscall102" => func!(crate::syscalls::___syscall102),
"___syscall110" => func!(crate::syscalls::___syscall110),
"___syscall114" => func!(crate::syscalls::___syscall114),
"___syscall118" => func!(crate::syscalls::___syscall118),
"___syscall122" => func!(crate::syscalls::___syscall122),
"___syscall140" => func!(crate::syscalls::___syscall140),
"___syscall142" => func!(crate::syscalls::___syscall142),
"___syscall145" => func!(crate::syscalls::___syscall145),
"___syscall146" => func!(crate::syscalls::___syscall146),
"___syscall148" => func!(crate::syscalls::___syscall148),
"___syscall168" => func!(crate::syscalls::___syscall168),
"___syscall180" => func!(crate::syscalls::___syscall180),
"___syscall181" => func!(crate::syscalls::___syscall181),
Expand All @@ -529,6 +532,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
"___syscall201" => func!(crate::syscalls::___syscall201),
"___syscall202" => func!(crate::syscalls::___syscall202),
"___syscall205" => func!(crate::syscalls::___syscall205),
"___syscall207" => func!(crate::syscalls::___syscall207),
"___syscall212" => func!(crate::syscalls::___syscall212),
"___syscall219" => func!(crate::syscalls::___syscall219),
"___syscall220" => func!(crate::syscalls::___syscall220),
Expand All @@ -537,6 +541,7 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
"___syscall272" => func!(crate::syscalls::___syscall272),
"___syscall295" => func!(crate::syscalls::___syscall295),
"___syscall300" => func!(crate::syscalls::___syscall300),
"___syscall324" => func!(crate::syscalls::___syscall324),
"___syscall330" => func!(crate::syscalls::___syscall330),
"___syscall334" => func!(crate::syscalls::___syscall334),
"___syscall340" => func!(crate::syscalls::___syscall340),
Expand Down Expand Up @@ -654,6 +659,8 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
"___cxa_free_exception" => func!(crate::emscripten_target::___cxa_free_exception),
"___resumeException" => func!(crate::emscripten_target::___resumeException),
"_dladdr" => func!(crate::emscripten_target::_dladdr),
"_pthread_create" => func!(crate::emscripten_target::_pthread_create),
"_pthread_join" => func!(crate::emscripten_target::_pthread_join),
"_pthread_cond_destroy" => func!(crate::emscripten_target::_pthread_cond_destroy),
"_pthread_cond_init" => func!(crate::emscripten_target::_pthread_cond_init),
"_pthread_cond_signal" => func!(crate::emscripten_target::_pthread_cond_signal),
Expand All @@ -675,13 +682,29 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
"_gethostbyname_r" => func!(crate::emscripten_target::_gethostbyname_r),
"_getloadavg" => func!(crate::emscripten_target::_getloadavg),
// round 2
"nullFunc_di" => func!(crate::emscripten_target::nullFunc_di),
"nullFunc_dii" => func!(crate::emscripten_target::nullFunc_dii),
"nullFunc_diiii" => func!(crate::emscripten_target::nullFunc_diiii),
"nullFunc_iiid" => func!(crate::emscripten_target::nullFunc_iiid),
"nullFunc_iiji" => func!(crate::emscripten_target::nullFunc_iiji),
"nullFunc_iijj" => func!(crate::emscripten_target::nullFunc_iijj),
"nullFunc_iij" => func!(crate::emscripten_target::nullFunc_iij),
"nullFunc_ij" => func!(crate::emscripten_target::nullFunc_ij),
"nullFunc_j" => func!(crate::emscripten_target::nullFunc_j),
"nullFunc_jij" => func!(crate::emscripten_target::nullFunc_jij),
"nullFunc_jj" => func!(crate::emscripten_target::nullFunc_jj),
"nullFunc_jjj" => func!(crate::emscripten_target::nullFunc_jjj),
"nullFunc_jii" => func!(crate::emscripten_target::nullFunc_jii),
"nullFunc_jiij" => func!(crate::emscripten_target::nullFunc_jiij),
"nullFunc_vd" => func!(crate::emscripten_target::nullFunc_vd),
"nullFunc_iiiiiiiii" => func!(crate::emscripten_target::nullFunc_iiiiiiiii),
"nullFunc_iiiiiiiiiii" => func!(crate::emscripten_target::nullFunc_iiiiiiiiiii),
"nullFunc_iiiiijii" => func!(crate::emscripten_target::nullFunc_iiiiijii),
"nullFunc_iiiij" => func!(crate::emscripten_target::nullFunc_iiiij),
"nullFunc_iiij" => func!(crate::emscripten_target::nullFunc_iiij),
"nullFunc_iiiiji" => func!(crate::emscripten_target::nullFunc_iiiiji),
"nullFunc_iijii" => func!(crate::emscripten_target::nullFunc_iijii),
"nullFunc_iiiijii" => func!(crate::emscripten_target::nullFunc_iiiijii),
"nullFunc_viiiiiii" => func!(crate::emscripten_target::nullFunc_viiiiiii),
"nullFunc_viiiiiiii" => func!(crate::emscripten_target::nullFunc_viiiiiiii),
"nullFunc_viiiiiiiii" => func!(crate::emscripten_target::nullFunc_viiiiiiiii),
Expand All @@ -690,9 +713,13 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
"nullFunc_viiijiiiiii" => func!(crate::emscripten_target::nullFunc_viiijiiiiii),
"nullFunc_viij" => func!(crate::emscripten_target::nullFunc_viij),
"nullFunc_viiji" => func!(crate::emscripten_target::nullFunc_viiji),
"nullFunc_vijii" => func!(crate::emscripten_target::nullFunc_vijii),
"nullFunc_viijii" => func!(crate::emscripten_target::nullFunc_viijii),
"nullFunc_viiiij" => func!(crate::emscripten_target::nullFunc_viiiij),
"nullFunc_viijiii" => func!(crate::emscripten_target::nullFunc_viijiii),
"nullFunc_viijj" => func!(crate::emscripten_target::nullFunc_viijj),
"nullFunc_vij" => func!(crate::emscripten_target::nullFunc_vij),
"nullFunc_vid" => func!(crate::emscripten_target::nullFunc_vid),
"nullFunc_viji" => func!(crate::emscripten_target::nullFunc_viji),
"nullFunc_vijiii" => func!(crate::emscripten_target::nullFunc_vijiii),
"nullFunc_vijj" => func!(crate::emscripten_target::nullFunc_vijj),
Expand Down
53 changes: 39 additions & 14 deletions lib/emscripten/src/syscalls/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ use libc::{
getpid,
// iovec,
lseek,
off_t,
// open,
read,
// readv,
Expand All @@ -41,6 +42,9 @@ use wasmer_runtime_core::vm::Ctx;

use super::env;
use std::cell::Cell;
#[allow(unused_imports)]
use std::io::Error;
use std::mem;
use std::slice;

/// exit
Expand Down Expand Up @@ -254,10 +258,28 @@ pub fn ___syscall140(ctx: &mut Ctx, _which: i32, mut varargs: VarArgs) -> i32 {
// -> c_int
debug!("emscripten::___syscall140 (lseek) {}", _which);
let fd: i32 = varargs.get(ctx);
let offset: i32 = varargs.get(ctx);
let _ = varargs.get::<i32>(ctx); // ignore high offset
let offset_low: i32 = varargs.get(ctx);
let result_ptr_value = varargs.get::<i32>(ctx);
let whence: i32 = varargs.get(ctx);
debug!("=> fd: {}, offset: {}, whence = {}", fd, offset, whence);
unsafe { lseek(fd, offset as _, whence) as _ }
let offset = offset_low as off_t;
let ret = unsafe { lseek(fd, offset, whence) as i32 };
#[allow(clippy::cast_ptr_alignment)]
let result_ptr = emscripten_memory_pointer!(ctx.memory(0), result_ptr_value) as *mut i32;
assert_eq!(4, mem::align_of_val(&result_ptr));
unsafe {
*result_ptr = ret;
}
debug!(
"=> fd: {}, offset: {}, result_ptr: {}, whence: {} = {}\nlast os error: {}",
fd,
offset,
result_ptr_value,
whence,
0,
Error::last_os_error(),
);
0
}

/// readv
Expand Down Expand Up @@ -343,16 +365,6 @@ pub fn ___syscall191(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
-1
}

pub fn ___syscall194(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
debug!("emscripten::___syscall194 - stub");
-1
}

pub fn ___syscall196(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
debug!("emscripten::___syscall194 - stub");
-1
}

pub fn ___syscall199(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
debug!("emscripten::___syscall199 - stub");
-1
Expand All @@ -369,7 +381,14 @@ pub fn ___syscall195(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
unsafe {
let mut _stat: stat = std::mem::zeroed();
let ret = stat(pathname_addr, &mut _stat);
debug!("ret: {}", ret);
debug!(
"=> pathname: {}, buf: {}, path: {} = {}\nlast os error: {}",
pathname,
buf,
std::ffi::CStr::from_ptr(pathname_addr).to_str().unwrap(),
ret,
Error::last_os_error()
);
if ret != 0 {
return ret;
}
Expand Down Expand Up @@ -408,8 +427,14 @@ pub fn ___syscall221(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
// fcntl64
let _fd: i32 = varargs.get(ctx);
let cmd: u32 = varargs.get(ctx);
// (FAPPEND - 0x08
// |FASYNC - 0x40
// |FFSYNC - 0x80
// |FNONBLOCK - 0x04
debug!("=> fd: {}, cmd: {}", _fd, cmd);
match cmd {
2 => 0,
13 | 14 => 0, // pretend file locking worked
_ => -1,
}
}
Expand Down
Loading