mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-13 06:15:33 +00:00
debug statements, move another fn into platform mod
This commit is contained in:
parent
630d4bde13
commit
4eb9d3344b
@ -16,30 +16,11 @@ pub use self::windows::*;
|
|||||||
#[cfg(feature = "vfs")]
|
#[cfg(feature = "vfs")]
|
||||||
pub use self::emscripten_vfs::*;
|
pub use self::emscripten_vfs::*;
|
||||||
|
|
||||||
#[cfg(not(feature = "vfs"))]
|
|
||||||
use super::utils::copy_stat_into_wasm;
|
|
||||||
|
|
||||||
use super::varargs::VarArgs;
|
use super::varargs::VarArgs;
|
||||||
use byteorder::{ByteOrder, LittleEndian};
|
use byteorder::{ByteOrder, LittleEndian};
|
||||||
/// NOTE: TODO: These syscalls only support wasm_32 for now because they assume offsets are u32
|
/// NOTE: TODO: These syscalls only support wasm_32 for now because they assume offsets are u32
|
||||||
/// Syscall list: https://www.cs.utexas.edu/~bismith/test/syscalls/syscalls32.html
|
/// Syscall list: https://www.cs.utexas.edu/~bismith/test/syscalls/syscalls32.html
|
||||||
use libc::{
|
use libc::{c_int, c_void, chdir, exit, getpid, lseek, rmdir, write};
|
||||||
// ENOTTY,
|
|
||||||
c_int,
|
|
||||||
c_void,
|
|
||||||
chdir,
|
|
||||||
// fcntl, setsockopt, getppid
|
|
||||||
exit,
|
|
||||||
getpid,
|
|
||||||
// iovec,
|
|
||||||
lseek,
|
|
||||||
// open,
|
|
||||||
// readv,
|
|
||||||
rmdir,
|
|
||||||
// writev,
|
|
||||||
write,
|
|
||||||
// sockaddr_in,
|
|
||||||
};
|
|
||||||
use wasmer_runtime_core::vm::Ctx;
|
use wasmer_runtime_core::vm::Ctx;
|
||||||
|
|
||||||
use super::env;
|
use super::env;
|
||||||
@ -287,27 +268,6 @@ pub fn ___syscall199(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
|||||||
-1
|
-1
|
||||||
}
|
}
|
||||||
|
|
||||||
// stat64
|
|
||||||
#[cfg(not(feature = "vfs"))]
|
|
||||||
pub fn ___syscall195(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
|
||||||
debug!("emscripten::___syscall195 (stat64) {}", _which);
|
|
||||||
let pathname: u32 = varargs.get(ctx);
|
|
||||||
let buf: u32 = varargs.get(ctx);
|
|
||||||
|
|
||||||
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
|
||||||
|
|
||||||
unsafe {
|
|
||||||
let mut _stat: libc::stat = std::mem::zeroed();
|
|
||||||
let ret = libc::stat(pathname_addr, &mut _stat);
|
|
||||||
debug!("ret: {}", ret);
|
|
||||||
if ret != 0 {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
copy_stat_into_wasm(ctx, buf, &_stat);
|
|
||||||
}
|
|
||||||
0
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn ___syscall220(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
pub fn ___syscall220(_ctx: &mut Ctx, _one: i32, _two: i32) -> i32 {
|
||||||
debug!("emscripten::___syscall220");
|
debug!("emscripten::___syscall220");
|
||||||
-1
|
-1
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
use std::slice;
|
||||||
|
|
||||||
|
use crate::utils::{copy_stat_into_wasm, read_string_from_wasm};
|
||||||
use crate::varargs::VarArgs;
|
use crate::varargs::VarArgs;
|
||||||
/// NOTE: TODO: These syscalls only support wasm_32 for now because they assume offsets are u32
|
|
||||||
/// Syscall list: https://www.cs.utexas.edu/~bismith/test/syscalls/syscalls32.html
|
|
||||||
use libc::{
|
use libc::{
|
||||||
accept, bind, c_char, c_int, c_void, connect, dup2, fcntl, getgid, getpeername, getsockname,
|
accept, bind, c_char, c_int, c_void, connect, dup2, fcntl, getgid, getpeername, getsockname,
|
||||||
getsockopt, in_addr_t, in_port_t, ioctl, listen, msghdr, pid_t, recvfrom, recvmsg, sa_family_t,
|
getsockopt, in_addr_t, in_port_t, ioctl, listen, msghdr, pid_t, recvfrom, recvmsg, sa_family_t,
|
||||||
@ -9,15 +10,11 @@ use libc::{
|
|||||||
};
|
};
|
||||||
use wasmer_runtime_core::vm::Ctx;
|
use wasmer_runtime_core::vm::Ctx;
|
||||||
|
|
||||||
use std::slice;
|
|
||||||
|
|
||||||
// Another conditional constant for name resolution: Macos et iOS use
|
// Another conditional constant for name resolution: Macos et iOS use
|
||||||
// SO_NOSIGPIPE as a setsockopt flag to disable SIGPIPE emission on socket.
|
// SO_NOSIGPIPE as a setsockopt flag to disable SIGPIPE emission on socket.
|
||||||
// Other platforms do otherwise.
|
// Other platforms do otherwise.
|
||||||
use crate::utils::copy_stat_into_wasm;
|
|
||||||
#[cfg(target_os = "darwin")]
|
#[cfg(target_os = "darwin")]
|
||||||
use libc::SO_NOSIGPIPE;
|
use libc::SO_NOSIGPIPE;
|
||||||
|
|
||||||
#[cfg(not(target_os = "darwin"))]
|
#[cfg(not(target_os = "darwin"))]
|
||||||
const SO_NOSIGPIPE: c_int = 0;
|
const SO_NOSIGPIPE: c_int = 0;
|
||||||
|
|
||||||
@ -240,11 +237,14 @@ pub fn ___syscall102(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct GuestSockaddrIn {
|
pub struct GuestSockaddrIn {
|
||||||
pub sin_family: sa_family_t, // u16
|
pub sin_family: sa_family_t,
|
||||||
pub sin_port: in_port_t, // u16
|
// u16
|
||||||
pub sin_addr: GuestInAddr, // u32
|
pub sin_port: in_port_t,
|
||||||
pub sin_zero: [u8; 8], // u8 * 8
|
// u16
|
||||||
// 2 + 2 + 4 + 8 = 16
|
pub sin_addr: GuestInAddr,
|
||||||
|
// u32
|
||||||
|
pub sin_zero: [u8; 8], // u8 * 8
|
||||||
|
// 2 + 2 + 4 + 8 = 16
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
@ -298,9 +298,9 @@ pub fn ___syscall102(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
// Debug received address
|
// Debug received address
|
||||||
let _proper_address = address as *const GuestSockaddrIn;
|
let _proper_address = address as *const GuestSockaddrIn;
|
||||||
debug!(
|
debug!(
|
||||||
"=> address.sin_family: {:?}, address.sin_port: {:?}, address.sin_addr.s_addr: {:?}",
|
"=> address.sin_family: {:?}, address.sin_port: {:?}, address.sin_addr.s_addr: {:?}",
|
||||||
unsafe { (*_proper_address).sin_family }, unsafe { (*_proper_address).sin_port }, unsafe { (*_proper_address).sin_addr.s_addr }
|
unsafe { (*_proper_address).sin_family }, unsafe { (*_proper_address).sin_port }, unsafe { (*_proper_address).sin_addr.s_addr }
|
||||||
);
|
);
|
||||||
let status = unsafe { bind(socket, address, address_len) };
|
let status = unsafe { bind(socket, address, address_len) };
|
||||||
// debug!("=> status: {}", status);
|
// debug!("=> status: {}", status);
|
||||||
debug!(
|
debug!(
|
||||||
@ -494,7 +494,10 @@ pub fn ___syscall180(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
|
|
||||||
let buf_ptr = emscripten_memory_pointer!(ctx.memory(0), buf) as _;
|
let buf_ptr = emscripten_memory_pointer!(ctx.memory(0), buf) as _;
|
||||||
|
|
||||||
unsafe { libc::pread(fd, buf_ptr, count as _, offset) as _ }
|
let pread_result = unsafe { libc::pread(fd, buf_ptr, count as _, offset) as _ };
|
||||||
|
let _data_string = read_string_from_wasm(ctx.memory(0), buf);
|
||||||
|
|
||||||
|
pread_result
|
||||||
}
|
}
|
||||||
|
|
||||||
/// pwrite
|
/// pwrite
|
||||||
@ -553,8 +556,6 @@ pub fn ___syscall142(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
let readfds_ptr = emscripten_memory_pointer!(ctx.memory(0), readfds) as _;
|
let readfds_ptr = emscripten_memory_pointer!(ctx.memory(0), readfds) as _;
|
||||||
let writefds_ptr = emscripten_memory_pointer!(ctx.memory(0), writefds) as _;
|
let writefds_ptr = emscripten_memory_pointer!(ctx.memory(0), writefds) as _;
|
||||||
|
|
||||||
// let rd = unsafe { libc::read(bits[0], 0 as *mut _, 0)};
|
|
||||||
|
|
||||||
let _err = errno::errno();
|
let _err = errno::errno();
|
||||||
|
|
||||||
let result = unsafe { select(nfds, readfds_ptr, writefds_ptr, 0 as _, 0 as _) };
|
let result = unsafe { select(nfds, readfds_ptr, writefds_ptr, 0 as _, 0 as _) };
|
||||||
@ -566,7 +567,26 @@ pub fn ___syscall142(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
debug!("gah again: {}", _err);
|
debug!("gah again: {}", _err);
|
||||||
|
|
||||||
result
|
result
|
||||||
// unsafe { select(nfds, readfds_ptr, writefds_ptr, 0 as _, 0 as _) }
|
}
|
||||||
|
|
||||||
|
/// stat64
|
||||||
|
pub fn ___syscall195(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_int {
|
||||||
|
debug!("emscripten::___syscall195 (stat64) {}", _which);
|
||||||
|
let pathname: u32 = varargs.get(ctx);
|
||||||
|
let buf: u32 = varargs.get(ctx);
|
||||||
|
|
||||||
|
let pathname_addr = emscripten_memory_pointer!(ctx.memory(0), pathname) as *const i8;
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let mut _stat: libc::stat = std::mem::zeroed();
|
||||||
|
let ret = libc::stat(pathname_addr, &mut _stat);
|
||||||
|
debug!("ret: {}", ret);
|
||||||
|
if ret != 0 {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
copy_stat_into_wasm(ctx, buf, &_stat);
|
||||||
|
}
|
||||||
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
/// fstat64
|
/// fstat64
|
||||||
|
@ -29,6 +29,7 @@ pub fn ___syscall3(ctx: &mut Ctx, _: i32, mut varargs: VarArgs) -> i32 {
|
|||||||
let buf_addr = emscripten_memory_pointer!(ctx.memory(0), buf) as *mut u8;
|
let buf_addr = emscripten_memory_pointer!(ctx.memory(0), buf) as *mut u8;
|
||||||
let mut buf_slice = unsafe { slice::from_raw_parts_mut(buf_addr, count as _) };
|
let mut buf_slice = unsafe { slice::from_raw_parts_mut(buf_addr, count as _) };
|
||||||
let vfs = crate::env::get_emscripten_data(ctx).vfs.as_mut().unwrap();
|
let vfs = crate::env::get_emscripten_data(ctx).vfs.as_mut().unwrap();
|
||||||
|
|
||||||
let vfd = VirtualFd(fd);
|
let vfd = VirtualFd(fd);
|
||||||
let virtual_file_handle = vfs.get_virtual_file_handle(vfd).unwrap();
|
let virtual_file_handle = vfs.get_virtual_file_handle(vfd).unwrap();
|
||||||
|
|
||||||
@ -36,6 +37,9 @@ pub fn ___syscall3(ctx: &mut Ctx, _: i32, mut varargs: VarArgs) -> i32 {
|
|||||||
.vfs
|
.vfs
|
||||||
.read_file(virtual_file_handle as _, &mut buf_slice)
|
.read_file(virtual_file_handle as _, &mut buf_slice)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
debug!("{:?}", buf_slice);
|
||||||
|
|
||||||
debug!("=> read syscall returns: {}", ret);
|
debug!("=> read syscall returns: {}", ret);
|
||||||
ret as _
|
ret as _
|
||||||
}
|
}
|
||||||
@ -310,7 +314,10 @@ pub fn ___syscall180(ctx: &mut Ctx, _which: c_int, mut varargs: VarArgs) -> c_in
|
|||||||
.vfs
|
.vfs
|
||||||
.read_file(virtual_file_handle as _, &mut buf_slice_with_offset)
|
.read_file(virtual_file_handle as _, &mut buf_slice_with_offset)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
// let pread_result = unsafe { libc::pread(fd, buf_ptr, count as _, offset) as _ };
|
||||||
|
let _data_string = read_string_from_wasm(ctx.memory(0), buf);
|
||||||
|
|
||||||
|
// pread_result
|
||||||
// debug!("=> pread returns: {}", ret);
|
// debug!("=> pread returns: {}", ret);
|
||||||
ret as _
|
ret as _
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user