Commit Graph

553 Commits

Author SHA1 Message Date
f8af586a6d Remove dead code. 2020-05-19 15:02:04 -07:00
063863eb87 Add a trap code for misaligned atomic accesses. Called "unaligned" because that's what the thread proposal spectest uses. Use it in LLVM. 2020-05-19 12:36:27 -07:00
88bc330761 Remove commented-out code. 2020-05-19 11:52:34 -07:00
808cf9eb0d Remove obsolete comment and variables.
Expound upon comment. Fix typo.
2020-05-19 11:23:53 -07:00
ae6f0dadb2 Stop naming instructions with numbered names.
LLVM will number instructions if you don't provide a name, so we get %7 instead of %s7 from calling state.var_name(). LLVM doesn't assign the numbers until printing out the LLVM IR as text, which we never do in a normal run of wasmer.

If you're editing a .ll text by hand and you're worried about messing up the numbering, use `opt --instnamer` to assign autogenerated names to all numbered instructions.
2020-05-19 09:54:20 -07:00
976493c756 Merge pull request #31 from wasmerio/llvm-memorydefinition-cache
Cache lookup of VMMemoryDefinition.
2020-05-18 20:03:48 -07:00
0df99b5dbc Cache lookup of VMMemoryDefinition.
To add to the cache, mutability is required, so now `resolve_memory_ptr` must be `&mut self` which means that `translate_operator` may not hold those convenient immutable references across the whole function.

The search and replace to implement the above changes affected some commented out code, that code is removed.

MemoryStyle grows PartialEq and Eq so that we can check what the memory style is without a match expression.
2020-05-18 19:59:50 -07:00
363dbb3b08 Fixed lint issues 2020-05-18 14:55:55 -07:00
dff7cf28c9 Fix invalid LLVM IR for global.get/set of imported globals.
In passing, refactor global accesses and cache the address computations and values of const globals.

Also includes some cargo fmt fixes.
2020-05-18 14:35:23 -07:00
f20d09fb2d Fixed LLVM compilation 2020-05-18 13:23:19 -07:00
f666a394c5 Fix LLVM type of load of table entry. 2020-05-18 13:17:44 -07:00
9981a51f8f Merge pull request #23 from wasmerio/host-trampolines
Improved trampolines adding support for Dynamic functions
2020-05-18 13:12:37 -07:00
7783879ae2 Improve comment. 2020-05-18 12:44:49 -07:00
be1754766e Fix issue with GOT relocations being emitted on Mac. 2020-05-18 12:30:49 -07:00
288cb46715 Give the main loop a big comment explaining it.
Remove some commented out duplicate code.
2020-05-18 11:08:33 -07:00
cac3246b2e Improve error handling around ElfSectionIndex a little. 2020-05-18 10:56:44 -07:00
7e1f19eafe Add an ElfSectionIndex type for type safety and code clarity. 2020-05-18 09:51:00 -07:00
7e62e1f59b Factor out building and pushing the Relocation. This if-else just computes the relocation target. 2020-05-18 09:21:09 -07:00
a79a9b19f7 Remove name for unused variable. 2020-05-18 09:13:51 -07:00
aa4aa65d0c Remove some calls to clone() by using into_iter(). 2020-05-18 09:08:33 -07:00
fce8e32cf6 Don't make SectionBody's internal Vec public.
Add a new method to create a new section body. Remove unused methods. Improve implementation of is_empty().
2020-05-18 09:08:33 -07:00
1ee5f27a3a Simplify sort expression. 2020-05-18 09:08:33 -07:00
ea05e16b6d Parse relocations that apply to custom relocations.
This rewrites the whole relocation parsing to work properly.
  * we no longer use LocalRelocation and simply assign a new SectionIndex as new sections are encountered.
  * we no longer use string matching to determine what function applies relocations to what, instead we use the field in the elf section header that tells us
  * we no longer merge sections, each section from every function is preserved as an independent custom section in the module.
  * we now discover any new sections that need to be pulled in recursively as we parse each section
  * many error cases are either handled, or report CompileErrors.
2020-05-18 09:08:33 -07:00
5dfa9faafb Improve compiler names for trampoline functions 2020-05-17 20:32:42 -07:00
5f8f7a5dc1 Merge branch 'master' into host-trampolines 2020-05-15 20:07:40 -07:00
9a0c2a76a3 Add a list of relocations to custom sections. 2020-05-14 12:22:32 -07:00
73e97d95d7 Fix vmctx passed to direct calls of imported functions. 2020-05-14 11:53:10 -07:00
52ac543690 Merge branch 'master' into host-trampolines 2020-05-14 11:18:21 -07:00
1c21e4f927 Make host trampolines work (PoC) 2020-05-13 20:53:54 -07:00
bddc174327 Add trap on indirect call with uninitialized table element. 2020-05-13 17:06:59 -07:00
e3ac60da24 Fix invalid IR generation on imported memories and globals. 2020-05-13 15:57:41 -07:00
d23dbaa3fa When converting a float to an int, NaN produces bad conversion to integer, other out-of-bounds failures produce integer overflow. ¯\_(ツ)_/¯ 2020-05-13 15:57:41 -07:00
9d3162f578 Emit integer division by zero trap for all div/rem by zero, but not signed division of INT_MIN by -1. 2020-05-13 15:57:41 -07:00
6ed52be637 Add an explicit error when there's a relocation against .rodata. 2020-05-13 15:57:41 -07:00
486dedc601 Ignore multi-value errors on LLVM too, for now. 2020-05-13 15:57:41 -07:00
2f1de920f0 Fix up master
This happened because we didn't use something like bors to ensure we
were merging into the latest master
2020-05-13 15:42:10 -07:00
ea90cadaf1 cargo fmt
https://github.com/wasmerio/wasmer-reborn/runs/672125543?check_suite_focus=true
2020-05-13 13:18:27 -07:00
30a86db05b Fix type of OOB reported on call indirect index outside table. 2020-05-13 13:02:24 -07:00
fe42749002 Implement support for imported function calls. They need to be looked up from the vmctx at runtime.
In order to work with spectests, we need to change our function types to include a second fixed parameter, there are now two vmctx's (callee and caller) before any other arguments. Because we have a uniform call sequence for imported and local function calls (which we must have because we store both in the table and don't store what kind it is), we need to change the llvm function types for all our own functions and update how we call them and how we find our own arguments.
2020-05-13 12:49:26 -07:00
119320603c Sometimes we generate our own function names. Look up names in our name map, not the wasm module. 2020-05-13 11:50:23 -07:00
26cea55e84 Use &x[y] instead of x.get(y).unwrap() on PrimaryMap and SecondaryMap. 2020-05-13 11:29:42 -07:00
4e9bb35e41 We depend on llvm 10, fix build.rs. While at it, bump to latest inkwell. 2020-05-13 11:05:58 -07:00
6871d327b1 Bounds check pointer accesses to dynamic memory plan memory. 2020-05-12 21:11:42 -07:00
613e40ed79 The llvm compiler uses ELF under the hood, attempt to convert any Target to the same thing, but with ELF. 2020-05-12 21:11:42 -07:00
3a991a7f59 Upgrade libc to 0.2.70. Removedd unnecessary trap shims 2020-05-12 17:43:43 -07:00
af6a26381a Disable local debugging code. 2020-05-12 15:03:54 -07:00
3b23ab2146 Fix call_indirect. 2020-05-11 17:12:47 -07:00
fce8dacc10 Reimplement table_prepare for new vmctx. 2020-05-11 16:06:02 -07:00
d9ca668607 Merge pull request #6 from wasmerio/add-c-api
Add C API
2020-05-08 16:10:09 -07:00
63d7df78fa Implement load and store. 2020-05-07 18:30:30 -07:00