Refactor - vm interface of BuiltinFunction
s
#535
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This drastically simplifies the vm interface of
BuiltinFunction
s so that it becomes a lot closer to the vm internal call interface:ContextObject
,MemoryMapping
andProgramResult
the encrypted pointer to the entire EbpfVm is passed, which is then decrypted and decomposed insidedeclare_builtin_function()
. Thanks to Refactor - Optimize JIT registers #534, this does not even require swapping of argument registers.declare_builtin_function()
, which does not only deduplicate the logic, but also allows LLVM to optimize the register allocation, spilling and perform inlining, effectively reducing the cost of a syscall from three context switches between the VM and Rust ABI, down to one.Unfortunately, encrypt_runtime_environment is now no longer optional as we can not read the config of the VM without dereferencing the potentially encrypted VM pointer.