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.
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.
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.
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.
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.
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.