This commit is contained in:
losfair 2019-04-28 12:58:27 +08:00
commit e63d7fd531
13 changed files with 33 additions and 58 deletions

View File

@ -103,7 +103,7 @@ jobs:
- run: - run:
name: Install Rust name: Install Rust
command: | command: |
curl https://sh.rustup.rs -sSf | sh -s -- -y curl -sSf https://sh.rustup.rs | sh -s -- -y
export PATH="$HOME/.cargo/bin:$PATH" export PATH="$HOME/.cargo/bin:$PATH"
cargo --version cargo --version
- run: - run:
@ -153,7 +153,8 @@ jobs:
- run: - run:
name: "Pull dependencies" name: "Pull dependencies"
command: | command: |
git clone git@github.com:wasmerio/wapm-cli.git git submodule init
git submodule update --remote
- restore_cache: - restore_cache:
keys: keys:
- v8-cargo-cache-linux-nightly-{{ arch }}-{{ checksum "Cargo.lock" }} - v8-cargo-cache-linux-nightly-{{ arch }}-{{ checksum "Cargo.lock" }}
@ -220,7 +221,8 @@ jobs:
- run: - run:
name: "Pull dependencies" name: "Pull dependencies"
command: | command: |
git clone git@github.com:wasmerio/wapm-cli.git git submodule init
git submodule update --remote
- restore_cache: - restore_cache:
keys: keys:
- v8-cargo-cache-darwin-nightly-{{ arch }}-{{ checksum "Cargo.lock" }} - v8-cargo-cache-darwin-nightly-{{ arch }}-{{ checksum "Cargo.lock" }}
@ -238,7 +240,7 @@ jobs:
- run: - run:
name: Install Rust name: Install Rust
command: | command: |
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly-2019-04-11 curl -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain nightly
export PATH="$HOME/.cargo/bin:$PATH" export PATH="$HOME/.cargo/bin:$PATH"
cargo --version cargo --version
# Use rust nightly (for singlepass, for now) # Use rust nightly (for singlepass, for now)

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "wapm-cli"]
path = wapm-cli
url = https://github.com/wasmerio/wapm-cli.git

View File

@ -5,6 +5,8 @@ All PRs to the Wasmer repository must add to this file.
Blocks of changes will separated by version increments. Blocks of changes will separated by version increments.
## **[Unreleased]** ## **[Unreleased]**
- [#397](https://github.com/wasmerio/wasmer/pull/397) Fix WASI fs abstraction to work on Windows
- [#390](https://github.com/wasmerio/wasmer/pull/390) Pin released wapm version and add it as a git submodule
- [#383](https://github.com/wasmerio/wasmer/pull/383) Hook up wasi exit code to wasmer cli. - [#383](https://github.com/wasmerio/wasmer/pull/383) Hook up wasi exit code to wasmer cli.
- [#382](https://github.com/wasmerio/wasmer/pull/382) Improve error message on `--backend` flag to only suggest currently enabled backends - [#382](https://github.com/wasmerio/wasmer/pull/382) Improve error message on `--backend` flag to only suggest currently enabled backends
- [#381](https://github.com/wasmerio/wasmer/pull/381) Allow retrieving propagated user errors. - [#381](https://github.com/wasmerio/wasmer/pull/381) Allow retrieving propagated user errors.

1
Cargo.lock generated
View File

@ -2414,7 +2414,6 @@ dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmer-runtime-core 0.3.0", "wasmer-runtime-core 0.3.0",
"zbox 0.6.1 (git+https://github.com/wasmerio/zbox?branch=bundle-libsodium)",
] ]
[[package]] [[package]]

View File

@ -5,7 +5,7 @@ use std::sync::Arc;
use wasmer_runtime_core::{ use wasmer_runtime_core::{
backend::{sys::Memory, CacheGen}, backend::{sys::Memory, CacheGen},
cache::{Artifact, Error}, cache::{Artifact, Error},
module::{ModuleInfo, ModuleInner}, module::ModuleInfo,
structures::Map, structures::Map,
types::{LocalFuncIndex, SigIndex}, types::{LocalFuncIndex, SigIndex},
}; };

View File

@ -298,7 +298,7 @@ impl LLVMBackend {
let callbacks = get_callbacks(); let callbacks = get_callbacks();
let mut module: *mut LLVMModule = ptr::null_mut(); let mut module: *mut LLVMModule = ptr::null_mut();
let slice = unsafe { memory.as_slice() }; let slice = memory.as_slice();
let res = module_load(slice.as_ptr(), slice.len(), callbacks, &mut module); let res = module_load(slice.as_ptr(), slice.len(), callbacks, &mut module);
@ -308,7 +308,7 @@ impl LLVMBackend {
static SIGNAL_HANDLER_INSTALLED: Once = Once::new(); static SIGNAL_HANDLER_INSTALLED: Once = Once::new();
SIGNAL_HANDLER_INSTALLED.call_once(|| unsafe { SIGNAL_HANDLER_INSTALLED.call_once(|| {
crate::platform::install_signal_handler(); crate::platform::install_signal_handler();
}); });

View File

@ -657,10 +657,3 @@ impl<'a> DynFunc<'a> {
} }
} }
} }
#[doc(hidden)]
impl Instance {
pub fn memory_offset_addr(&self, _: u32, _: usize) -> *const u8 {
unimplemented!()
}
}

View File

@ -17,8 +17,7 @@ use crate::{
use hashbrown::HashMap; use hashbrown::HashMap;
use std::fmt::Debug; use std::fmt::Debug;
use wasmparser::{ use wasmparser::{
BinaryReaderError, Data, DataKind, Element, ElementKind, Export, ExternalKind, FuncType, BinaryReaderError, ExternalKind, FuncType, ImportSectionEntryType, Operator, Type as WpType,
Import, ImportSectionEntryType, InitExpr, ModuleReader, Operator, SectionCode, Type as WpType,
WasmDecoder, WasmDecoder,
}; };

View File

@ -16,8 +16,3 @@ hashbrown = "0.1.8"
generational-arena = "0.2.2" generational-arena = "0.2.2"
log = "0.4.6" log = "0.4.6"
byteorder = "1.3.1" byteorder = "1.3.1"
[dependencies.zbox]
git = "https://github.com/wasmerio/zbox"
branch = "bundle-libsodium"
features = ["libsodium-bundled"]

View File

@ -9,45 +9,39 @@ use std::{
cell::Cell, cell::Cell,
fs, fs,
io::{self, Read, Seek, Write}, io::{self, Read, Seek, Write},
path::PathBuf,
time::SystemTime, time::SystemTime,
}; };
use wasmer_runtime_core::debug; use wasmer_runtime_core::debug;
use zbox::init_env as zbox_init_env;
pub const MAX_SYMLINKS: usize = 100; pub const MAX_SYMLINKS: usize = 100;
#[derive(Debug)] #[derive(Debug)]
pub enum WasiFile { pub enum WasiFile {
#[allow(dead_code)]
ZboxFile(zbox::File),
HostFile(fs::File), HostFile(fs::File),
} }
impl Write for WasiFile { impl Write for WasiFile {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> { fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.write(buf),
WasiFile::HostFile(hf) => hf.write(buf), WasiFile::HostFile(hf) => hf.write(buf),
} }
} }
fn flush(&mut self) -> io::Result<()> { fn flush(&mut self) -> io::Result<()> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.flush(),
WasiFile::HostFile(hf) => hf.flush(), WasiFile::HostFile(hf) => hf.flush(),
} }
} }
fn write_all(&mut self, buf: &[u8]) -> io::Result<()> { fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.write_all(buf),
WasiFile::HostFile(hf) => hf.write_all(buf), WasiFile::HostFile(hf) => hf.write_all(buf),
} }
} }
fn write_fmt(&mut self, fmt: ::std::fmt::Arguments) -> io::Result<()> { fn write_fmt(&mut self, fmt: ::std::fmt::Arguments) -> io::Result<()> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.write_fmt(fmt),
WasiFile::HostFile(hf) => hf.write_fmt(fmt), WasiFile::HostFile(hf) => hf.write_fmt(fmt),
} }
} }
@ -56,28 +50,24 @@ impl Write for WasiFile {
impl Read for WasiFile { impl Read for WasiFile {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.read(buf),
WasiFile::HostFile(hf) => hf.read(buf), WasiFile::HostFile(hf) => hf.read(buf),
} }
} }
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> io::Result<usize> { fn read_to_end(&mut self, buf: &mut Vec<u8>) -> io::Result<usize> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.read_to_end(buf),
WasiFile::HostFile(hf) => hf.read_to_end(buf), WasiFile::HostFile(hf) => hf.read_to_end(buf),
} }
} }
fn read_to_string(&mut self, buf: &mut String) -> io::Result<usize> { fn read_to_string(&mut self, buf: &mut String) -> io::Result<usize> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.read_to_string(buf),
WasiFile::HostFile(hf) => hf.read_to_string(buf), WasiFile::HostFile(hf) => hf.read_to_string(buf),
} }
} }
fn read_exact(&mut self, buf: &mut [u8]) -> io::Result<()> { fn read_exact(&mut self, buf: &mut [u8]) -> io::Result<()> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.read_exact(buf),
WasiFile::HostFile(hf) => hf.read_exact(buf), WasiFile::HostFile(hf) => hf.read_exact(buf),
} }
} }
@ -86,7 +76,6 @@ impl Read for WasiFile {
impl Seek for WasiFile { impl Seek for WasiFile {
fn seek(&mut self, pos: io::SeekFrom) -> io::Result<u64> { fn seek(&mut self, pos: io::SeekFrom) -> io::Result<u64> {
match self { match self {
WasiFile::ZboxFile(zbf) => zbf.seek(pos),
WasiFile::HostFile(hf) => hf.seek(pos), WasiFile::HostFile(hf) => hf.seek(pos),
} }
} }
@ -150,7 +139,9 @@ pub enum Kind {
handle: WasiFile, handle: WasiFile,
}, },
Dir { Dir {
handle: WasiFile, // TODO: wrap it like WasiFile
/// The path on the host system where the directory is located
path: PathBuf,
/// The entries of a directory are lazily filled. /// The entries of a directory are lazily filled.
entries: HashMap<String, Inode>, entries: HashMap<String, Inode>,
}, },
@ -182,10 +173,7 @@ pub struct WasiFs {
} }
impl WasiFs { impl WasiFs {
pub fn new(preopened_files: &[String]) -> Result<Self, String> { pub fn new(preopened_dirs: &[String]) -> Result<Self, String> {
debug!("wasi::fs::init");
zbox_init_env();
debug!("wasi::fs::repo");
/*let repo = RepoOpener::new() /*let repo = RepoOpener::new()
.create(true) .create(true)
.open("mem://wasmer-test-fs", "") .open("mem://wasmer-test-fs", "")
@ -200,29 +188,26 @@ impl WasiFs {
next_fd: Cell::new(3), next_fd: Cell::new(3),
inode_counter: Cell::new(1000), inode_counter: Cell::new(1000),
}; };
for file in preopened_files { for dir in preopened_dirs {
debug!("Attempting to preopen {}", &file); debug!("Attempting to preopen {}", &dir);
// TODO: think about this // TODO: think about this
let default_rights = 0x1FFFFFFF; // all rights let default_rights = 0x1FFFFFFF; // all rights
let cur_file: fs::File = fs::OpenOptions::new() let cur_dir = PathBuf::from(dir);
.read(true) let cur_dir_metadata = cur_dir.metadata().expect("Could not find directory");
.open(file) let kind = if cur_dir_metadata.is_dir() {
.expect("Could not find file");
let cur_file_metadata = cur_file.metadata().unwrap();
let kind = if cur_file_metadata.is_dir() {
Kind::Dir { Kind::Dir {
handle: WasiFile::HostFile(cur_file), path: cur_dir.clone(),
entries: Default::default(), entries: Default::default(),
} }
} else { } else {
return Err(format!( return Err(format!(
"WASI only supports pre-opened directories right now; found \"{}\"", "WASI only supports pre-opened directories right now; found \"{}\"",
file &dir
)); ));
}; };
// TODO: handle nested pats in `file` // TODO: handle nested pats in `file`
let inode_val = let inode_val =
InodeVal::from_file_metadata(&cur_file_metadata, file.clone(), true, kind); InodeVal::from_file_metadata(&cur_dir_metadata, dir.clone(), true, kind);
let inode = wasi_fs.inodes.insert(inode_val); let inode = wasi_fs.inodes.insert(inode_val);
wasi_fs.inodes[inode].stat.st_ino = wasi_fs.inode_counter.get(); wasi_fs.inodes[inode].stat.st_ino = wasi_fs.inode_counter.get();

View File

@ -1242,15 +1242,12 @@ pub fn path_open(
}; };
// TODO: handle __WASI_O_TRUNC on directories // TODO: handle __WASI_O_TRUNC on directories
let cur_dir = wasi_try!(open_options
.open(&cumulative_path)
.map_err(|_| __WASI_EINVAL));
// TODO: refactor and reuse // TODO: refactor and reuse
let cur_file_metadata = cur_dir.metadata().unwrap(); let cur_file_metadata =
wasi_try!(cumulative_path.metadata().map_err(|_| __WASI_EINVAL));
let kind = if cur_file_metadata.is_dir() { let kind = if cur_file_metadata.is_dir() {
Kind::Dir { Kind::Dir {
handle: WasiFile::HostFile(cur_dir), path: cumulative_path.clone(),
entries: Default::default(), entries: Default::default(),
} }
} else { } else {

View File

@ -1,8 +1,7 @@
use cmake::Config;
fn main() { fn main() {
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
{ {
use cmake::Config;
let project_name = "exception_handling"; let project_name = "exception_handling";
let dst = Config::new(project_name).build(); let dst = Config::new(project_name).build();
println!("cargo:rustc-link-search=native={}", dst.display()); println!("cargo:rustc-link-search=native={}", dst.display());

1
wapm-cli Submodule

@ -0,0 +1 @@
Subproject commit c9399f3fb117c8ab1cbaf17b02bd5aeefb8e8e54