Remove some allocations in CodeMemory (#3253)
* Remove some allocations in `CodeMemory` This commit removes the `FinishedFunctions` type as well as allocations associated with trampolines when allocating inside of a `CodeMemory`. The main goal of this commit is to improve the time spent in `CodeMemory` where currently today a good portion of time is spent simply parsing symbol names and trying to extract function indices from them. Instead this commit implements a new strategy (different from #3236) where compilation records offset/length information for all functions/trampolines so this doesn't need to be re-learned from the object file later. A consequence of this commit is that this offset information will be decoded/encoded through `bincode` unconditionally, but we can also optimize that later if necessary as well. Internally this involved quite a bit of refactoring since the previous map for `FinishedFunctions` was relatively heavily relied upon. * comments
This commit is contained in:
@@ -37,7 +37,7 @@ use std::convert::TryFrom;
|
||||
use std::ops::Range;
|
||||
use wasmtime_environ::obj;
|
||||
use wasmtime_environ::{
|
||||
DefinedFuncIndex, EntityRef, FuncIndex, Module, PrimaryMap, SignatureIndex,
|
||||
DefinedFuncIndex, EntityRef, FuncIndex, Module, PrimaryMap, SignatureIndex, Trampoline,
|
||||
};
|
||||
|
||||
const TEXT_SECTION_NAME: &[u8] = b".text";
|
||||
@@ -230,9 +230,14 @@ impl<'a> ObjectBuilder<'a> {
|
||||
range
|
||||
}
|
||||
|
||||
pub fn trampoline(&mut self, sig: SignatureIndex, func: &'a CompiledFunction) {
|
||||
pub fn trampoline(&mut self, sig: SignatureIndex, func: &'a CompiledFunction) -> Trampoline {
|
||||
let name = obj::trampoline_symbol_name(sig);
|
||||
self.append_func(name.into_bytes(), func);
|
||||
let (_, range) = self.append_func(name.into_bytes(), func);
|
||||
Trampoline {
|
||||
signature: sig,
|
||||
start: range.start,
|
||||
length: u32::try_from(range.end - range.start).unwrap(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn align_text_to(&mut self, align: u64) {
|
||||
|
||||
Reference in New Issue
Block a user