Struct CodeMemory
pub struct CodeMemory { /* private fields */ }Expand description
Management of executable memory within a MmapVec
This type consumes ownership of a region of memory and will manage the executable permissions of the contained JIT code as necessary.
Implementations§
§impl CodeMemory
impl CodeMemory
pub fn new(engine: &Engine, mmap: MmapVec) -> Result<CodeMemory, Error>
pub fn new(engine: &Engine, mmap: MmapVec) -> Result<CodeMemory, Error>
Creates a new CodeMemory by taking ownership of the provided
MmapVec.
The returned CodeMemory manages the internal MmapVec and the
publish method is used to actually make the memory executable.
pub fn mmap(&self) -> &MmapVec
pub fn mmap(&self) -> &MmapVec
Returns a reference to the underlying MmapVec this memory owns.
pub fn text(&self) -> &[u8] ⓘ
pub fn text(&self) -> &[u8] ⓘ
Returns the contents of the text section of the ELF executable this represents.
pub fn wasm_dwarf(&self) -> &[u8] ⓘ
pub fn wasm_dwarf(&self) -> &[u8] ⓘ
Returns the contents of the ELF_WASMTIME_DWARF section.
pub fn func_name_data(&self) -> &[u8] ⓘ
pub fn func_name_data(&self) -> &[u8] ⓘ
Returns the data in the ELF_NAME_DATA section.
pub fn wasm_data(&self) -> &[u8] ⓘ
pub fn wasm_data(&self) -> &[u8] ⓘ
Returns the concatenated list of all data associated with this wasm module.
This is used for initialization of memories and all data ranges stored
in a Module are relative to the slice returned here.
pub fn address_map_data(&self) -> &[u8] ⓘ
pub fn address_map_data(&self) -> &[u8] ⓘ
Returns the encoded address map section used to pass to
wasmtime_environ::lookup_file_pos.
pub fn stack_map_data(&self) -> &[u8] ⓘ
pub fn stack_map_data(&self) -> &[u8] ⓘ
Returns the encoded stack map section used to pass to
wasmtime_environ::StackMap::lookup.
pub fn exception_tables(&self) -> &[u8] ⓘ
pub fn exception_tables(&self) -> &[u8] ⓘ
Returns the encoded exception-tables section to pass to
wasmtime_unwinder::ExceptionTable::parse.
pub fn frame_tables(&self) -> &[u8] ⓘ
pub fn frame_tables(&self) -> &[u8] ⓘ
Returns the encoded frame-tables section to pass to
wasmtime_environ::FrameTable::parse.
pub fn wasm_bytecode(&self) -> &[u8] ⓘ
pub fn wasm_bytecode(&self) -> &[u8] ⓘ
Returns the concatenated Wasm bytecode section, or an empty slice if
the artifact was not compiled with guest-debug enabled.
pub fn wasm_bytecode_ends(&self) -> &[u8] ⓘ
pub fn wasm_bytecode_ends(&self) -> &[u8] ⓘ
Returns the Wasm bytecode section end-offset array.
pub fn wasmtime_info(&self) -> &[u8] ⓘ
pub fn wasmtime_info(&self) -> &[u8] ⓘ
Returns the contents of the ELF_WASMTIME_INFO section, or an empty
slice if it wasn’t found.
pub fn trap_data(&self) -> &[u8] ⓘ
pub fn trap_data(&self) -> &[u8] ⓘ
Returns the contents of the ELF_WASMTIME_TRAPS section, or an empty
slice if it wasn’t found.
pub fn publish(&mut self) -> Result<(), Error>
pub fn publish(&mut self) -> Result<(), Error>
Publishes the internal ELF image to be ready for execution.
This method can only be when the image is not published (its
default state) and will panic if called when already
published. This will parse the ELF image from the original
MmapVec and do everything necessary to get it ready for
execution, including:
- Change page protections from read/write to read/execute.
- Register unwinding information with the OS
- Register this image with the debugger if native DWARF is present
After this function executes all JIT code should be ready to execute.
The action may be reversed by calling Self::unpublish, as long
as that method’s safety requirements are upheld.
pub fn unpublish(&mut self) -> Result<(), Error>
pub fn unpublish(&mut self) -> Result<(), Error>
“Unpublish” code memory (transition it from executable to read/writable).
This may be used to edit the code image, as long as the
overall size of the memory remains the same. Note the hazards
inherent in editing code that may have been executed: any
stack frames with PC still active in this code must be
suspended (e.g., called into a hostcall that is then invoking
this method, or async-yielded) and any active PC values must
point to valid instructions. Thus this is mostly useful for
patching in-place at particular sites, such as by the use of
Cranelift’s patchable_call instruction.
If this fails, then the memory remains executable.
pub fn text_mut(&mut self) -> &mut [u8] ⓘ
pub fn text_mut(&mut self) -> &mut [u8] ⓘ
Return a mutable borrow to the code, suitable for editing.
Must not be published.
§Panics
This method panics if the code has been published (and not subsequently unpublished).
pub fn lookup_trap_code(&self, text_offset: usize) -> Option<CompiledTrap>
pub fn lookup_trap_code(&self, text_offset: usize) -> Option<CompiledTrap>
Looks up the given offset within this module’s text section and returns the trap code associated with that instruction, if there is one.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for CodeMemory
impl !UnwindSafe for CodeMemory
impl Freeze for CodeMemory
impl Send for CodeMemory
impl Sync for CodeMemory
impl Unpin for CodeMemory
impl UnsafeUnpin for CodeMemory
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more