Commit Graph

6452 Commits

Author SHA1 Message Date
Alex Crichton
922b49744b Remove no-longer-needed wasm-webidl-bindings dep (#1316)
Forgotten from previous interface types removal!
2020-03-13 17:50:00 -05:00
Nick Fitzgerald
aec28638a3 Merge pull request #1312 from fitzgen/labels-in-quotes
Put all labels and globs in quotes for automatic labeling config
2020-03-13 12:53:25 -07:00
Nick Fitzgerald
e595028f95 Put all labels and globs in quotes for automatic labeling config
It is too easy to run afoul of yaml syntax with all these colons an asterisks,
e.g. we recently broke the bot like this:

``
YAMLException: unidentified alias ".md" at line 58, column 9:
      - *.md
            ^
    at generateError (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:8357:10)
    at throwError (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:8363:9)
    at readAlias (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:9466:5)
    at composeNode (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:9558:20)
    at readBlockMapping (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:9226:16)
    at composeNode (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:9549:12)
    at readBlockSequence (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:9145:5)
    at composeNode (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:9548:12)
    at readBlockMapping (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:9279:11)
    at composeNode (/home/runner/work/_actions/bytecodealliance/labeler/schedule-fork/dist/index.js:9549:12)
```
2020-03-13 12:48:13 -07:00
Jakub Konka
5024d7bf09 [wiggle] Impl different formatters for flags (#1299)
* Impl different formatters for flags

Rather than forcing only binary formatting of flags types, how about
we implement all relevant traits (`Binary`, `Octal`, `LowerHex`, and
`UpperHex`) and allow the user to pick the most relevant one for their
use case?

Also, we use at least `Octal` and `LowerHex` in a couple of places
in `wasi-common`.

* fmt::Display for flags now inspired by bitflags

Flags is now by default formatted similarly to how
`bitflags` crate does it, namely, `dsync|append (0x11)`. In case
we're dealing with an empty set, we get `empty (0x0)`. Because of
this, any `Octal`, `LowerHex`, etc., formatters are redundant now.

Furthermore, while here, I've rewritten `EMPTY_FLAGS` and `ALL_FLAGS`
(where the former means `0x0` and the latter is the union of all possible
values) to be `const fn empty()` and `const fn all()` where the latter is
an expanded union of primitive representation values out of a macro.
This is again largely inspired by the `bitflags` crate.

* Test fmt::Display for flags
2020-03-13 12:27:34 -07:00
Pat Hickey
e495570f07 Merge pull request #1307 from bytecodealliance/pch/wiggle_publish_tweaks
[wiggle] missed versions and fields in wiggle cargo.toml
2020-03-12 15:54:41 -07:00
Pat Hickey
7ed829fe82 missed versions and fields in wiggle cargo.toml 2020-03-12 14:47:39 -07:00
Alex Crichton
950dc2fbc6 Fill out API docs on wasmtime::Module (#1305)
* Fill out API docs on `wasmtime::Module`

Part of #1272

* Apply suggestions from code review

Co-Authored-By: Nick Fitzgerald <fitzgen@gmail.com>

Co-authored-by: Nick Fitzgerald <fitzgen@gmail.com>
2020-03-12 16:41:17 -05:00
Nick Fitzgerald
575df82760 Merge pull request #1304 from fitzgen/re-enable-subscribe-to-label-action-and-more-bot-configs
Re enable subscribe to label action and more bot configs
2020-03-12 14:23:52 -07:00
Alex Crichton
3e2be43502 Pre-generate trampoline functions (#957)
* Refactor wasmtime_runtime::Export

Instead of an enumeration with variants that have data fields have an
enumeration where each variant has a struct, and each struct has the
data fields. This allows us to store the structs in the `wasmtime` API
and avoid lots of `panic!` calls and various extraneous matches.

* Pre-generate trampoline functions

The `wasmtime` crate supports calling arbitrary function signatures in
wasm code, and to do this it generates "trampoline functions" which have
a known ABI that then internally convert to a particular signature's ABI
and call it. These trampoline functions are currently generated
on-the-fly and are cached in the global `Store` structure. This,
however, is suboptimal for a few reasons:

* Due to how code memory is managed each trampoline resides in its own
  64kb allocation of memory. This means if you have N trampolines you're
  using N * 64kb of memory, which is quite a lot of overhead!

* Trampolines are never free'd, even if the referencing module goes
  away. This is similar to #925.

* Trampolines are a source of shared state which prevents `Store` from
  being easily thread safe.

This commit refactors how trampolines are managed inside of the
`wasmtime` crate and jit/runtime internals. All trampolines are now
allocated in the same pass of `CodeMemory` that the main module is
allocated into. A trampoline is generated per-signature in a module as
well, instead of per-function. This cache of trampolines is stored
directly inside of an `Instance`. Trampolines are stored based on
`VMSharedSignatureIndex` so they can be looked up from the internals of
the `ExportFunction` value.

The `Func` API has been updated with various bits and pieces to ensure
the right trampolines are registered in the right places. Overall this
should ensure that all trampolines necessary are generated up-front
rather than lazily. This allows us to remove the trampoline cache from
the `Compiler` type, and move one step closer to making `Compiler`
threadsafe for usage across multiple threads.

Note that as one small caveat the `Func::wrap*` family of functions
don't need to generate a trampoline at runtime, they actually generate
the trampoline at compile time which gets passed in.

Also in addition to shuffling a lot of code around this fixes one minor
bug found in `code_memory.rs`, where `self.position` was loaded before
allocation, but the allocation may push a new chunk which would cause
`self.position` to be zero instead.

* Pass the `SignatureRegistry` as an argument to where it's needed.

This avoids the need for storing it in an `Arc`.

* Ignore tramoplines for functions with lots of arguments

Co-authored-by: Dan Gohman <sunfish@mozilla.com>
2020-03-12 16:17:48 -05:00
Nick Fitzgerald
b9dd91f1a4 Fix cranelift:module labeling path globs 2020-03-12 13:08:14 -07:00
Nick Fitzgerald
f88a540725 Add automatic labeling for the cranelift-wasm crate and its tests 2020-03-12 13:07:35 -07:00
Nick Fitzgerald
e2b8d26722 Sort labels alphabetically 2020-03-12 13:06:23 -07:00
Alex Crichton
34f768ddd5 Temporarily remove support for interface types (#1292)
* Temporarily remove support for interface types

This commit temporarily removes support for interface types from the
`wasmtime` CLI and removes the `wasmtime-interface-types` crate. An
error is now printed for any input wasm modules that have wasm interface
types sections to indicate that support has been removed and references
to two issues are printed as well:

* #677 - tracking work for re-adding interface types support
* #1271 - rationale for removal and links to other discussions

Closes #1271

* Update the python extension
2020-03-12 15:05:39 -05:00
Nick Fitzgerald
0b8f7d8883 Add a label for Wasmtime's documentation and guide 2020-03-12 13:04:46 -07:00
Nick Fitzgerald
687042f6ae Also label the fuzz targets with the "fuzzing" label 2020-03-12 13:03:54 -07:00
Nick Fitzgerald
43af21e84d Subscribe myself to the "fuzzing" label 2020-03-12 13:03:27 -07:00
Nick Fitzgerald
2fb98ad590 Revert "Temporarily disable subscribe to label"
This reverts commit 8e21cfef88.
2020-03-12 12:59:29 -07:00
Pat Hickey
6e55c543e2 [wiggle] Add docs and cargo metadata (#1297)
* test-all: add wiggle & children, plus wasi-common, to cargo test

* wiggle: add licenses, readmes, docs, cargo metadata
2020-03-12 14:46:51 -05:00
Alex Crichton
c1ef0db027 Ignore a test failing on CI (#1302)
This'll get fixed in #1298 but for now let's get CI working again
2020-03-12 13:29:42 -05:00
Nick Fitzgerald
6c33829543 Merge pull request #1300 from fitzgen/disable-subscribe-to-label
Temporarily disable subscribe to label
2020-03-12 10:22:06 -07:00
Nick Fitzgerald
8e21cfef88 Temporarily disable subscribe to label 2020-03-12 10:21:29 -07:00
Alex Crichton
af0a4dc0ca Don't define two on: sections in CI 2020-03-12 09:02:09 -07:00
Ifenna Ozoekwe-Awagu
67b3a890dc Add tutorial for building and running hello-world.wasm (#1285)
* Add tutorial for building and running hello-world.wasm

* Fix issues with directory trees in last commit

* Add more information on various ways of creating .wasm files and running them with Wasmtime

* Fix internal links and add more information on Wasmtime CLI installation
2020-03-12 10:49:31 -05:00
Nick Fitzgerald
23916329bd Run the subscribe-to-label action on a schedule rather than on pull requests (#1296)
Ideally, this would be on "labeled" types of pull request events, but that
doesn't work if the pull request is from another fork. For example, see
https://github.com/actions/labeler/issues/12
2020-03-12 10:49:05 -05:00
Pat Hickey
4a443e4f10 Merge pull request #1294 from bytecodealliance/pch/wiggle_relative_paths
wiggle: make paths relative to use site of macro
2020-03-11 16:02:59 -07:00
Pat Hickey
edb39fd4a3 wiggle: make paths relative to use site of macro
prior to this change, they were relative to CARGO_MANIFEST_DIR for the
wiggle-generate crate.
2020-03-11 14:44:38 -07:00
Nick Fitzgerald
8747488e9f Use ** to match through multiple directories in labeler action (#1293) 2020-03-11 16:29:05 -05:00
Alex Crichton
3c51d3adb8 Move all examples to a top-level directory (#1286)
* Move all examples to a top-level directory

This commit moves all API examples (Rust and C) to a top-level
`examples` directory. This is intended to make it more discoverable and
conventional as to where examples are located. Additionally all examples
are now available in both Rust and C to see how to execute the example
in the language you're familiar with. The intention is that as more
languages are supported we'd add more languages as examples here too.

Each example is also accompanied by either a `*.wat` file which is
parsed as input, or a Rust project in a `wasm` folder which is compiled
as input.

A simple driver crate was also added to `crates/misc` which executes all
the examples on CI, ensuring the C and Rust examples all execute
successfully.
2020-03-11 15:37:24 -05:00
Dan Gohman
d44384da8a Exit with a more severe error code if the program traps. (#1274)
* Exit with a more severe error code if the program traps.

Previously, the wasmtime CLI would return with a regular failure
error code, such as 1 on Unix. However, a program trap indicates a bug
in the program, which can be useful to distinguish from a simple error
status. Check for the trap case, and return an appropriate OS-specific
exit status.

* Use a loop to iterate over the error causes to find Traps.

* Use anyhow's `chain()` iterator.

* For completeness, handle non-Unix and non-Windows platforms too.

* Add a CLI test for a trapping program.

* Replace a manual `.cause` loop with a `.is` call.

* Correct the expected exit status on Windows.

* Use assert_eq/assert_ne so that if these fail, it prints the output.
2020-03-11 13:12:26 -07:00
Nick Fitzgerald
81d9a5e6db Merge pull request #1291 from fitzgen/use-our-labeler-fork
Use our fork of the labeler action that supports cron schedules
2020-03-11 12:43:59 -07:00
Nick Fitzgerald
5100ac26d7 Use our fork of the labeler action that supports cron schedules 2020-03-11 12:41:52 -07:00
Pat Hickey
3ccd10274b Merge pull request #1287 from bytecodealliance/pch/cranelift_module_label
Two more label tweaks
2020-03-11 10:43:47 -07:00
Pat Hickey
9d381cdb31 add wiggle to wasi label 2020-03-11 10:32:46 -07:00
Pat Hickey
43f9532ed7 give special label to cranelift-module and its children 2020-03-11 10:31:28 -07:00
Jakub Konka
dab9ffcca5 Merge pull request #1278 from kubkon/hello-wiggle
[wasi-common]: Hello wiggle!
2020-03-11 18:11:07 +01:00
Jakub Konka
7bcbf40f1d Fix wiggle's tests 2020-03-11 17:33:29 +01:00
Jakub Konka
ae0a0240ed Add 'crates/wiggle/' from commit 'cd484e49932d8dd8f1bd1a002e0717ad8bff07fb'
git-subtree-dir: crates/wiggle
git-subtree-mainline: 2ead747f48
git-subtree-split: cd484e4993
2020-03-11 17:30:49 +01:00
Yury Delendik
f76b36f737 Write .debug_frame information (#53)
* Write .debug_frame information

* mv map_reg
2020-03-11 10:22:51 -05:00
Nick Fitzgerald
2ead747f48 Enable bulk memory in the fuzzers (#1277) 2020-03-11 08:02:19 -05:00
Jakub Konka
02c3169151 Autolabel wasi-common PRs as wasi (#1279)
It seems we missed that one in the labeler, so adding now.
2020-03-11 11:47:09 +01:00
Nick Fitzgerald
1385b08771 Merge pull request #1276 from fitzgen/subscribe-to-label
Enable the "Subscribe to Label" github action
2020-03-10 15:53:53 -07:00
Nick Fitzgerald
9c9da1dfda Enable the "Subscribe to Label" github action
This allows users to follow certain labels and automatically get @-mentioned
when they are applied to an issue or a pull request.

See https://github.com/bytecodealliance/subscribe-to-label-action for details.

Fixes #1234
2020-03-10 15:19:34 -07:00
Pat Hickey
cd484e4993 add a lifetime to the wiggle_runtime::GuestErrorType trait (#41)
* add a lifetime to the wiggle_runtime::GuestErrorType trait, wiggle_tests::WasiCtx struct

* wiggle-generate: make config parsing public so it can be reused in lucet
2020-03-10 14:48:57 -07:00
Nick Fitzgerald
e364633c39 Automatically label pull requests based on the file paths modified (#1273)
* Automatically label pull requests based on the file paths modified

* Add `wasmtime:c-api` labels for changes to `crates/c-api/*`
2020-03-10 16:40:02 -05:00
Pat Hickey
2139020d6d add manual interface for borrowing a GuestPtr (#40)
* add manual interface for borrowing a GuestPtr

* add manual borrow checking methods for slice and str as well

* update test to use borrow_slice
2020-03-10 12:33:02 -07:00
Jakub Konka
bd5e71b038 [wasi-common]: add armv7 support to wasi-common (#1269)
* Add armv7 support to wasi-common

This commit enables `target_pointer_width = 32` compatibility for
`wasi-common` (and by transitivity, any crate found inside, e.g., `yanix`).
I've also added a simplistic (bare minimum) check to our CI to ensure
that `wasi-common` cross-compiles to `armv7-unknown-gnueabihf` fine.
While here, I've done the same for `wasm32-unknown-emscripten`.

* Clean arch-specific impls + reuse libc consts

* Make SeekLoc::from_raw platform independent

* Collapse CI cc jobs into one
2020-03-10 19:18:59 +01:00
Nick Fitzgerald
67bfeea16f fuzzing: Limit the total number of API calls generated (#1265)
To avoid libfuzzer timeouts, limit the total number of API calls we generate in
the `api_calls` fuzz target. We were already limiting the number of exported
function calls we made, and this extends the limit to all API calls.
2020-03-10 11:28:00 -05:00
Dan Gohman
ac0ee271b1 Log to stderr by default. (#1266)
Change the default from file-per-thread-logger to pretty-env-logger,
which is more common in Rust projects, and change the option from `-d`
to `--log-to-files`.
2020-03-10 09:36:56 -05:00
Nick Fitzgerald
674a6208d8 Implement data.drop and memory.init and get the rest of the bulk memory spec tests passing (#1264)
* Enable the already-passing `bulk-memoryoperations/imports.wast` test

* Implement support for the `memory.init` instruction and passive data

This adds support for passive data segments and the `memory.init` instruction
from the bulk memory operations proposal. Passive data segments are stored on
the Wasm module and then `memory.init` instructions copy their contents into
memory.

* Implement the `data.drop` instruction

This allows wasm modules to deallocate passive data segments that it doesn't
need anymore. We keep track of which segments have not been dropped on an
`Instance` and when dropping them, remove the entry from the instance's hash
map. The module always needs all of the segments for new instantiations.

* Enable final bulk memory operations spec test

This requires special casing an expected error message for an `assert_trap`,
since the expected error message contains the index of an uninitialized table
element, but our trap implementation doesn't save that diagnostic information
and shepherd it out.
2020-03-10 09:30:11 -05:00
Alex Crichton
11510ec426 Disallow values to cross stores (#1016)
* Disallow values to cross stores

Lots of internals in the wasmtime-{jit,runtime} crates are highly
unsafe, so it's up to the `wasmtime` API crate to figure out how to make
it safe. One guarantee we need to provide is that values never cross
between stores. For example you can't take a function in one store and
move it over into a different instance in a different store. This
dynamic check can't be performed at compile time and it's up to
`wasmtime` to do the check itself.

This adds a number of checks, but not all of them, to the codebase for
now. This primarily adds checks around instantiation, globals, and
tables. The main hole in this is functions, where you can pass in
arguments or return values that are not from the right store. For now
though we can't compile modules with `anyref` parameters/returns anyway,
so we should be good. Eventually when that is supported we'll need to
put the guards in place.

Closes #958

* Clarify how values test they come from stores

* Allow null anyref to initialize tables
2020-03-10 09:28:31 -05:00