elf_loader 0.17.0

A no_std-friendly ELF loader and runtime linker for Rust.
Documentation
use crate::{
    fixture::fixtures,
    support::{
        CALL_FIRST, CALL_SECOND, FIRST, SECOND, call, load_eager, load_lazy, load_provider, slot,
        symbol,
    },
};

#[test]
fn resolves_slots_independently() {
    let provider = load_provider();
    let loaded = load_lazy(&provider);
    let bytes = &fixtures().consumer;
    let first = symbol(&provider, FIRST);
    let second = symbol(&provider, SECOND);
    let second_before = slot(&loaded, bytes, SECOND);

    assert_ne!(slot(&loaded, bytes, FIRST), first);
    assert_ne!(second_before, second);

    assert_eq!(call(&loaded, CALL_FIRST), 1);
    assert_eq!(slot(&loaded, bytes, FIRST), first);
    assert_eq!(slot(&loaded, bytes, SECOND), second_before);

    assert_eq!(call(&loaded, CALL_SECOND), 2);
    assert_eq!(slot(&loaded, bytes, FIRST), first);
    assert_eq!(slot(&loaded, bytes, SECOND), second);
}

#[test]
fn bind_now_is_eager() {
    let provider = load_provider();
    let loaded = load_eager(&provider);
    let bytes = &fixtures().now;

    assert_eq!(slot(&loaded, bytes, FIRST), symbol(&provider, FIRST));
    assert_eq!(slot(&loaded, bytes, SECOND), symbol(&provider, SECOND));
}