#[path = "common/mod.rs"]
mod fixture_support;
use elf_loader::{Loader, Result};
#[allow(dead_code)]
#[derive(Debug)]
struct MyContext {
load_time: std::time::SystemTime,
custom_id: u32,
}
impl Default for MyContext {
fn default() -> Self {
Self {
load_time: std::time::SystemTime::now(),
custom_id: 0,
}
}
}
fn main() -> Result<()> {
unsafe { std::env::set_var("RUST_LOG", "trace") };
env_logger::init();
let mut loader = Loader::new().with_dynamic_initializer::<MyContext>(|dynamic| {
println!("Initializing user data for: {}", dynamic.name());
if let Some(context) = dynamic.user_data_mut() {
context.load_time = std::time::SystemTime::now();
context.custom_id = 42;
}
Ok(())
});
let fixtures = fixture_support::ensure_all();
let lib = loader
.load_dylib(fixtures.liba_str())?
.relocator()
.relocate()?;
let context = lib.user_data();
println!("Loaded {:?} with context: {:?}", lib.name(), context);
Ok(())
}