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§

source§

impl CodeMemory

source

pub fn new(mmap: MmapVec) -> Result<Self>

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.

source

pub fn mmap(&self) -> &MmapVec

Returns a reference to the underlying MmapVec this memory owns.

source

pub fn text(&self) -> &[u8]

Returns the contents of the text section of the ELF executable this represents.

source

pub fn dwarf(&self) -> &[u8]

Returns the contents of the ELF_WASMTIME_DWARF section.

source

pub fn func_name_data(&self) -> &[u8]

Returns the data in the ELF_NAME_DATA section.

source

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.

source

pub fn address_map_data(&self) -> &[u8]

Returns the encoded address map section used to pass to wasmtime_environ::lookup_file_pos.

source

pub fn wasmtime_info(&self) -> &[u8]

Returns the contents of the ELF_WASMTIME_INFO section, or an empty slice if it wasn’t found.

source

pub fn trap_data(&self) -> &[u8]

Returns the contents of the ELF_WASMTIME_TRAPS section, or an empty slice if it wasn’t found.

source

pub unsafe fn vmtrampoline(&self, loc: FunctionLoc) -> VMTrampoline

Returns a VMTrampoline function pointer for the given function in the text section.

Unsafety

This function is unsafe as there’s no guarantee that the returned function pointer is valid.

source

pub fn publish(&mut self) -> Result<()>

Publishes the internal ELF image to be ready for execution.

This method can only be called once and will panic if called twice. 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

After this function executes all JIT code should be ready to execute.

Trait Implementations§

source§

impl Drop for CodeMemory

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.