Commit Graph

5615 Commits

Author SHA1 Message Date
Jef
d7434fe5d2 Have vmctx be the first argument so we (almost) never have to shuffle it around 2019-01-16 09:33:46 +01:00
Jef
b86d11e4ad Avoid unnecessary work when passing arguments on 2019-01-15 17:24:30 +01:00
Jef
62fe065e85 Fix miscompilation for maliciously-crafted use of locals 2019-01-15 14:00:43 +01:00
Jef
45b2a5dae2 Merge remote-tracking branch 'forked/master' into loops 2019-01-15 12:59:55 +01:00
Jef
1b6952bb99 Implement vmctx as a hidden argument for cranelift compat 2019-01-15 12:27:55 +01:00
Dan Gohman
aeb9161e2c Update no_std support for Rust 2018 Edition.
With Rust 2018 Edition, the `mod std` trick to alias `core` names to
`std` no longer works, so switch to just having the code use `core`
explicitly.

So instead, switch to just using `core::*` for things that in core.
This is more consistent with other Rust no_std code. And it allows
us to enable `no_std` mode unconditionally in the crates that support
it, which makes testing a little easier.

There actually three cases:

 - For things in std and also in core, like `cmp`: Just use them via
   `core::*`.

 - For things in std and also in alloc, like `Vec`: Import alloc as std, as
   use them from std. This allows them to work on both stable (which
   doesn't provide alloc, but we don't support no_std mode anyway) and
   nightly.

 - For HashMap and similar which are not in core or alloc, import them in
   the top-level lib.rs files from either std or the third-party hashmap_core
   crate, and then have the code use super::hashmap_core.

Also, no_std support continues to be "best effort" at this time and not
something most people need to be testing.
2019-01-14 21:48:15 -08:00
Dan Gohman
50a045363c Add an explicit trap code for wasm unreachable. 2019-01-14 21:40:27 -08:00
bjorn3
2f0e0dd995 Really fix emit_small_memcpy this time! 2019-01-14 21:39:50 -08:00
bjorn3
3809e7252d Remove outdated comment
cranelift-frontend now inserts libcalls for mem{cpy,set,move}
2019-01-14 21:39:00 -08:00
buckle2000
01ed463c7a Change SignalHandlers.h to SignalHandlers.hpp 2019-01-14 21:30:25 -08:00
Jef
8312730377 Make calling functions safe 2019-01-14 18:45:14 +01:00
Jef
1eebc65c9e First baby steps to supporting memory accesses
Currently we don't actually sandbox the memory at all, so you can do evil things
like read and write the host's memory. We also don't support growing memory or
cranelift-compatible ABI that passes the memory offset as an argument.

We also always immediately allocate the buffer when encountering a memory section,
there is preliminary support for translating a buffer which can then have the real
offset replaced using relocations (and returning a different type when doing so)
but I haven't written the code that actually does relocation so it doesn't work yet.
2019-01-11 15:20:32 +01:00
Dan Gohman
9fe08c9341 Tidy up pointer casting to avoid casts that change mutability. 2019-01-08 10:31:58 -08:00
Jef
ddb4c0fd19 x64 sign-extends imm32 arguments, so don't truncate them in an unsigned way 2019-01-08 11:10:59 +01:00
Jef
010f2d8569 Fix comparisons, add more tests for binops 2019-01-08 09:45:39 +01:00
Dan Gohman
a5bd3924e3 Add crate version identifiers. 2019-01-07 14:52:11 -08:00
Dan Gohman
9eba81a8d9 Update clippy settings and fix a few clippy warnings. 2019-01-07 14:48:02 -08:00
Dan Gohman
a7aee246e9 Pass declare_signature's argument by value.
`parse_type_section` doesn't need the value after passing it, and this
allows callees to avoid cloning if they need their own copy.
2019-01-07 13:42:00 -08:00
Dan Gohman
13138b65f7 Call the new ModuleEnvironment reserve functions. 2019-01-07 13:42:00 -08:00
Dan Gohman
6ec0b3c6bf Add a comment. 2019-01-07 13:42:00 -08:00
Dan Gohman
7120633363 Change the elems parameter of declare_table_elements to a boxed slice.
Implementations that want a full `Vec` can use `into_vec` to convert it
back.
2019-01-07 13:42:00 -08:00
Dan Gohman
054e6fcf07 Add functions to ModuleEnvironment to support reserving buffers up front.
These default to doing nothing, but implementations can override them to
preallocate buffers.

Also, reorder the functions in `ModuleEnvironment` to more closely
reflect the sequence from the WebAssembly module layout.
2019-01-07 13:42:00 -08:00
Dan Gohman
7f250e340c Simplify ModuleEnvironment.
Remove some unneeded functions, and remove the `GlobalInit` special case
for data and elem initializer offsets; implementations that want that
information can provide it for themselves.
2019-01-07 13:42:00 -08:00
Jef
fcd18746a7 Add 64-bit operations 2019-01-07 19:17:29 +01:00
Dan Gohman
0a2b0ee9b0 Mmap API tidying.
Establish more clear expectations for who is expected to page-align what
and when.
2019-01-06 10:08:40 -08:00
Dan Gohman
0826e32c9a Tidy up unnecessary return statements. 2019-01-05 16:23:04 -08:00
Dan Gohman
3143e22566 Move the creation of linear-memory guard pages into the mmap module.
Create linear-memory pages as PROT_NONE and then make them accessible on
demand.
2019-01-05 16:23:04 -08:00
Dan Gohman
3ac4269dc5 Add host_state() accessors to InstanceContents and VMContext too. 2019-01-04 17:24:14 -08:00
Dan Gohman
73b2c45313 Add a host_state field to Instance.
This allows hosts to embed arbitrary state along with instances.
2019-01-04 17:15:22 -08:00
Dan Gohman
3aef763046 Delete an unneeded comment. 2019-01-03 15:50:04 -08:00
Dan Gohman
6661228c86 Tidy up whitespace. 2019-01-03 14:44:30 -08:00
Dan Gohman
e876f0fb1d Add some Cargo.toml keywords. 2019-01-03 14:25:33 -08:00
Dan Gohman
35d7f78a11 Handle errors cleanly in the wast runner. 2019-01-03 14:16:48 -08:00
Dan Gohman
40acc1f340 Add crate version identifiers. 2019-01-03 14:16:48 -08:00
Dan Gohman
585bdac91e Use vec![0; size] instead of creating an empty Vec and resizing. 2019-01-03 14:16:48 -08:00
Dan Gohman
a41bc1fe1e Fix unused use warnings. 2019-01-03 14:16:48 -08:00
Dan Gohman
ca2fdc5ccb Update no_std support.
This `no_std` support isn't complete though, as some dependencies
don't support it.
2019-01-03 14:16:48 -08:00
Dan Gohman
f6c2fe7d2d Update to Rust 2018 Edition. 2019-01-03 12:58:11 -08:00
Dan Gohman
00a84672f7 Use Vec::with_capacity. 2019-01-03 12:37:14 -08:00
Benjamin Bouvier
03c22ed67a Remove warnings in tests; 2019-01-03 12:14:39 -08:00
Benjamin Bouvier
c78a9a4a7c Bump log and file-per-thread-logger; 2019-01-03 12:14:39 -08:00
Benjamin Bouvier
813810008b Replace deprecated trim_left_matches by trim_start_matches; 2019-01-03 12:14:39 -08:00
Benjamin Bouvier
7e42966c68 Use snake case for magic numbers computation; 2019-01-03 12:13:25 -08:00
Dan Gohman
fdc66e130f Eliminate unneeded casts. 2019-01-03 12:05:32 -08:00
Dan Gohman
39770ec72c Minor code tidying. 2019-01-03 12:05:26 -08:00
Dan Gohman
701b1998e9 Avoid creating slices with null pointers. 2019-01-03 12:05:17 -08:00
Dan Gohman
57e183f5f8 Use TablePlan::for_table and MemoryPlan::for_memory instead of manual code. 2019-01-03 12:05:07 -08:00
Dan Gohman
8a5429ce74 Factor out functions for working with table and memory initializers. 2019-01-03 12:04:58 -08:00
Dan Gohman
747dbb23e7 Add fuzz targets for module instantiation. 2019-01-03 12:04:48 -08:00
Dan Gohman
df7724ce2b Update Cargo.toml authors fields. 2019-01-03 12:04:37 -08:00