Implement the struct in
OpaqueExecutionEngine. Compile everything with auxiliary data structure and store in the mmaped file.
Moduleis the basic unit of compilation
- Dynamic Linking(Von Neumann Architecture)
- Auxiliary data structure
- StandAlone Linker and Loader Relocation for function library
ORCJIT is not a standalone JIT engine and do not have dynamic compilation with program synthesis optimization.
- Concurrent/Speculative/Eager compilation, compilation on lookup with reexport/linking/indirection support
- low compilation overhead
- may be slow first time call
- Remote execution & debugging support 
- Good for live migration
- not good mapping accross platform
- Do not have struct
OpaqueExecutionEngineand standalone struct update during running.
- Static Var Init
- C ABI
- Auto memory management for JITed code
- dwarf debug info(refer to julia) 
aot_loader.cis the main entry point of AOT
aot_runtime.cgives the runtime export function for AOT that can hook for specific logic exports
aot_compile.cyou can export the logic and output the corresponding calls the runtime function. etc.
aot_callto call the function with
--aot-dump-frameon for wamrc option.
aot_emit_*.cis the instruction emmitter for every instruction in wasm which literally the same as interpretor but to LLVM backend.
- checkpoint happens with LLVM passes that insert the
fenceon top of the label. where the wasm stack is stateless of the LLVM state which we can snapshot all the corresponding state to wasm view. Restore happens to make the stateless wasm stack back to the LLVM state. which literally skip the logic that happens before the checkpoint.