Commit Graph

56 Commits

Author SHA1 Message Date
Nick Lewycky
73e97d95d7 Fix vmctx passed to direct calls of imported functions. 2020-05-14 11:53:10 -07:00
Nick Lewycky
bddc174327 Add trap on indirect call with uninitialized table element. 2020-05-13 17:06:59 -07:00
Nick Lewycky
e3ac60da24 Fix invalid IR generation on imported memories and globals. 2020-05-13 15:57:41 -07:00
Nick Lewycky
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
Nick Lewycky
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
Nick Lewycky
6ed52be637 Add an explicit error when there's a relocation against .rodata. 2020-05-13 15:57:41 -07:00
Mark McCaskey
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
nlewycky
ea90cadaf1 cargo fmt
https://github.com/wasmerio/wasmer-reborn/runs/672125543?check_suite_focus=true
2020-05-13 13:18:27 -07:00
Nick Lewycky
30a86db05b Fix type of OOB reported on call indirect index outside table. 2020-05-13 13:02:24 -07:00
Nick Lewycky
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
Nick Lewycky
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
Nick Lewycky
26cea55e84 Use &x[y] instead of x.get(y).unwrap() on PrimaryMap and SecondaryMap. 2020-05-13 11:29:42 -07:00
Nick Lewycky
6871d327b1 Bounds check pointer accesses to dynamic memory plan memory. 2020-05-12 21:11:42 -07:00
Nick Lewycky
af6a26381a Disable local debugging code. 2020-05-12 15:03:54 -07:00
Nick Lewycky
3b23ab2146 Fix call_indirect. 2020-05-11 17:12:47 -07:00
Nick Lewycky
fce8dacc10 Reimplement table_prepare for new vmctx. 2020-05-11 16:06:02 -07:00
Nick Lewycky
63d7df78fa Implement load and store. 2020-05-07 18:30:30 -07:00
Nick Lewycky
91411aefe8 Implement support for memory.grow and memory.size. 2020-05-06 19:11:11 -07:00
Nick Lewycky
9e4550d4bc Add missing TODO. 2020-05-06 15:25:44 -07:00
Nick Lewycky
13e9bd6c11 Implement global.get and global.set.
`global.get` of const globals is not cached.
2020-05-06 15:08:42 -07:00
Nick Lewycky
187324b3d3 Add support for a function referring to its own bytes. 2020-05-05 14:15:39 -07:00
Nick Lewycky
50664f9aaa Produce a correct but minimal FunctionAddressMap.
Fixes debug_assert! firing in lookup_frame_info.
2020-05-05 13:57:47 -07:00
Nick Lewycky
fbeedbd3ac Wire up llvm code generated traps to the new runtime trap handler function. 2020-05-05 13:42:11 -07:00
Nick Lewycky
9d44735347 Fix function calls to themselves.
Previously fac-rec-named was emitting a call to fac-rec-named.1 due to LLVM auto-renaming the function.
2020-05-05 12:31:59 -07:00
Nick Lewycky
7465430868 Add support for relocations to other functions defined in the same module. 2020-05-05 11:47:17 -07:00
nlewycky
fdfb74abc2 Merge pull request #15 from wasmerio/rust-goblin
Replace llvm objectfile reader with goblin.
2020-05-04 20:52:57 -07:00
Nick Lewycky
830cebc91b Remove LLVM Object library-based .o reader. 2020-05-04 20:40:51 -07:00
Nick Lewycky
72899ccd47 Add support for libcalls. 2020-05-04 20:39:16 -07:00
Syrus
1363b98e47 Moved Unwind info a bit to make refactor easier 2020-05-04 20:37:28 -07:00
Nick Lewycky
df9e056b5b Replace object file loading code with an implementation based on top of goblin. 2020-05-04 19:57:23 -07:00
Syrus
0bd6a0dd6b Renamed FuncIndex to FunctionIndex 2020-05-04 13:39:12 -07:00
Syrus
2997be7d88 Renamed FuncType to FunctionType 2020-05-04 13:34:05 -07:00
Nick Lewycky
359f89878f Add the correct number of locals when the same type is repeated. 2020-05-04 10:51:59 -07:00
Nick Lewycky
3a004b3e82 Fix build of compiler-llvm by growing the interface to SectionBody. 2020-05-03 16:08:05 -07:00
Syrus
14061b9171 Fixed LLVM compilation 2020-05-02 14:51:51 -07:00
Syrus
deace5beb0 Renamed back into LocalFunc 2020-05-02 04:43:31 -07:00
Syrus
fdef870e5a Renamed UserFunc to ImportedFunc 2020-05-02 04:19:11 -07:00
Syrus
fd96c4080e Merge branch 'master' into frame-info
# Conflicts:
#	lib/compiler-llvm/src/compiler.rs
#	lib/compiler-llvm/src/translator/code.rs
2020-05-01 22:09:26 -07:00
Syrus
20ad3d608f Fixed LLVM with new compiler structure 2020-05-01 22:04:33 -07:00
Nick Lewycky
4827434eef Build up list of per-function custom sections and build local relocations into them. 2020-05-01 16:31:26 -07:00
Nick Lewycky
1227d50e9b Initial commit for support of custom sections. 2020-05-01 15:46:45 -07:00
Nick Lewycky
b5d9b448ae Add support for libcalls as relocation targets. 2020-04-30 20:54:29 -07:00
Nick Lewycky
71eeb135bc Parse a relocation to a different user function out of the object file.
This updates to a newer inkwell to pick up a fix to Section::get_contents. Picking that up changed builder.build_struct_gep to return a Result, and there's many API updates scattered around to support that.

Compute the function names for all local and imported functions in the module in advance and pass that mapping to the function code generation.

debug_trap is added to Intrinsics, though all users are commented out.
2020-04-29 17:41:30 -07:00
Syrus
39550bc469 Simplified wasmparser dependencies 2020-04-28 14:26:31 -07:00
Nick Lewycky
502e5badf4 Finish emitting and loading the trampoline code.
Turning an LLVM module into a CompiledFunction should be refactored.

Bump to latest inkwell so that we can make use of object_file with the fixes.

Comment out accidentally committed debug code that writes to my home directory.
2020-04-24 17:07:54 -07:00
Nick Lewycky
1de21f0c33 Make translator::intrinsics accessible to trampoline.
Start filling in the code to generate trampolines. Move func_type_to_llvm and type_to_llvm from code.rs to intrinsics.rs so that trampoline code can reuse them.
2020-04-24 16:42:14 -07:00
Nick Lewycky
a6bde15ce5 Connect trampoline code to trampoline module. Still unimplemented. 2020-04-24 16:31:31 -07:00
Nick Lewycky
474b3eb2f2 Fill in CompiledFunction::body with the instructions.
Use a bit of a hack to find the function, we ask LLVM to emit it to a non-standard section with a name of our choosing, and that entire section should have our function body and nothing else.
2020-04-24 16:06:03 -07:00
Nick Lewycky
8b7da22a1a Make vmctx an i8* so that we can use byte addressing.
Implement dynamic_sigindex.
2020-04-24 15:37:45 -07:00
Nick Lewycky
56fe08ad00 Assorted fixes:
Fix creation of the target machine. Fix CPU features, architecture and target name.

Function names are not mandatory. Support unnamed functions.

Include parameters and local variables in the list of local variables for LLVMFunctionCodeGenerator.

Run the tests single-threaded, using a Mutex in the rayon code. This means that only the first error is real, subsequent errors are just picking up the panic across threads.

Add TODOs about attributes on vmctx.
2020-04-23 23:32:17 -07:00