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