pub struct Executable<C: ContextObject> { /* private fields */ }Expand description
Elf loader/relocator
Implementations§
Source§impl<C: ContextObject> Executable<C>
impl<C: ContextObject> Executable<C>
Sourcepub fn get_config(&self) -> &Config
pub fn get_config(&self) -> &Config
Get the configuration settings
Sourcepub fn get_sbpf_version(&self) -> SBPFVersion
pub fn get_sbpf_version(&self) -> SBPFVersion
Get the executable sbpf_version
Sourcepub fn get_text_bytes(&self) -> (u64, &[u8])
pub fn get_text_bytes(&self) -> (u64, &[u8])
Get the .text section virtual address and bytes
Sourcepub fn get_ro_section(&self) -> &[u8] ⓘ
pub fn get_ro_section(&self) -> &[u8] ⓘ
Get the concatenated read-only sections (including the text section)
Sourcepub fn get_ro_region(&self) -> MemoryRegion
pub fn get_ro_region(&self) -> MemoryRegion
Get a memory region that can be used to access the merged readonly section
Sourcepub fn get_entrypoint_instruction_offset(&self) -> usize
pub fn get_entrypoint_instruction_offset(&self) -> usize
Get the entry point offset into the text section
Sourcepub fn get_loader(&self) -> &Arc<BuiltinProgram<C>>
pub fn get_loader(&self) -> &Arc<BuiltinProgram<C>>
Get the loader built-in program
Sourcepub fn get_compiled_program(&self) -> Option<Arc<JitProgram>>
pub fn get_compiled_program(&self) -> Option<Arc<JitProgram>>
Get the JIT compiled program
This function will not block the calling thread even if there is a concurrent ongoing call
to Self::jit_compile.
Sourcepub fn jit_compile(&self) -> Result<(), EbpfError>
pub fn jit_compile(&self) -> Result<(), EbpfError>
JIT compile the executable
This function does not ensure fully sequentially consistent execution ordering between calls
to it and related calls such as Self::get_compiled_program or
Self::take_compiled_program.
This means that there can be some non-trivial interactions in ordering between calls to this
function and a get_compiled_program: concurrent calls to get_compiled_program will
return the previous compiled program or None for the duration of the compilation process
and is only guaranteed to start returning the newly compiled JitProgram after this
function returns.
Sourcepub fn take_compiled_program(&self) -> Option<Arc<JitProgram>>
pub fn take_compiled_program(&self) -> Option<Arc<JitProgram>>
Remove the compiled program.
Note that the results can be unpredictable in presence of concurrent ongoing calls to
Self::jit_compile: based on exact execution ordering this function may take out the
previous program (or None) that shorly afterwards gets replaced by a compiled program.
Sourcepub fn get_function_registry(&self) -> &FunctionRegistry<usize>
pub fn get_function_registry(&self) -> &FunctionRegistry<usize>
Get the function registry
Sourcepub fn new_from_text_bytes(
text_bytes: &[u8],
loader: Arc<BuiltinProgram<C>>,
sbpf_version: SBPFVersion,
function_registry: FunctionRegistry<usize>,
) -> Result<Self, ElfError>
pub fn new_from_text_bytes( text_bytes: &[u8], loader: Arc<BuiltinProgram<C>>, sbpf_version: SBPFVersion, function_registry: FunctionRegistry<usize>, ) -> Result<Self, ElfError>
Create from raw text section bytes (list of instructions)
Sourcepub fn load(
bytes: &[u8],
loader: Arc<BuiltinProgram<C>>,
) -> Result<Self, ElfError>
pub fn load( bytes: &[u8], loader: Arc<BuiltinProgram<C>>, ) -> Result<Self, ElfError>
Fully loads an ELF
Sourcepub fn load_with_strict_parser(
bytes: &[u8],
loader: Arc<BuiltinProgram<C>>,
) -> Result<Self, ElfParserError>
pub fn load_with_strict_parser( bytes: &[u8], loader: Arc<BuiltinProgram<C>>, ) -> Result<Self, ElfParserError>
Loads an ELF without relocation
Source§impl<C: ContextObject> Executable<C>
Static constructors for Executable
impl<C: ContextObject> Executable<C>
Static constructors for Executable
Sourcepub fn from_elf(
elf_bytes: &[u8],
loader: Arc<BuiltinProgram<C>>,
) -> Result<Self, EbpfError>
pub fn from_elf( elf_bytes: &[u8], loader: Arc<BuiltinProgram<C>>, ) -> Result<Self, EbpfError>
Creates an executable from an ELF file
Sourcepub fn from_text_bytes(
text_bytes: &[u8],
loader: Arc<BuiltinProgram<C>>,
sbpf_version: SBPFVersion,
function_registry: FunctionRegistry<usize>,
) -> Result<Self, EbpfError>
pub fn from_text_bytes( text_bytes: &[u8], loader: Arc<BuiltinProgram<C>>, sbpf_version: SBPFVersion, function_registry: FunctionRegistry<usize>, ) -> Result<Self, EbpfError>
Creates an executable from machine code
Trait Implementations§
Source§impl<C: Debug + ContextObject> Debug for Executable<C>
impl<C: Debug + ContextObject> Debug for Executable<C>
Source§impl<C: PartialEq + ContextObject> PartialEq for Executable<C>
impl<C: PartialEq + ContextObject> PartialEq for Executable<C>
Auto Trait Implementations§
impl<C> !Freeze for Executable<C>
impl<C> RefUnwindSafe for Executable<C>
impl<C> Send for Executable<C>
impl<C> Sync for Executable<C>
impl<C> Unpin for Executable<C>
impl<C> UnsafeUnpin for Executable<C>
impl<C> UnwindSafe for Executable<C>
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
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