elf_loader 0.17.0

A no_std-friendly ELF loader and runtime linker for Rust.
Documentation
#[path = "support/mod.rs"]
mod fixture_support;

use elf_loader::{LinkContext, Linker, Result, input::PathBuf, runtime::DomainId};

fn main() -> Result<()> {
    let fixtures = fixture_support::ensure_all();
    let mut context = LinkContext::<()>::new(DomainId::PROCESS);

    let loaded = Linker::new()
        .resolver(fixture_support::search_path_resolver())
        .run()
        .load(&mut context, PathBuf::from(fixtures.leaf_str()))?;

    let module = context.module(loaded.root())?;
    let leaf_value = unsafe { module.get::<extern "C" fn() -> i32>("leaf_value").unwrap() };
    let value = leaf_value();
    assert_eq!(value, 3);
    println!(
        "loaded {} with {} committed modules; leaf_value() = {}",
        module.name(),
        loaded.modules().len(),
        value
    );

    Ok(())
}