mirror of https://github.com/aya-rs/aya
73 lines
1.9 KiB
Rust
73 lines
1.9 KiB
Rust
use aya::{
|
|
programs::{UProbe, Xdp},
|
|
util::KernelVersion,
|
|
Ebpf,
|
|
};
|
|
use test_log::test;
|
|
|
|
#[test]
|
|
fn relocations() {
|
|
let bpf = load_and_attach("test_64_32_call_relocs", crate::RELOCATIONS);
|
|
|
|
trigger_relocations_program();
|
|
|
|
let m = aya::maps::Array::<_, u64>::try_from(bpf.map("RESULTS").unwrap()).unwrap();
|
|
assert_eq!(m.get(&0, 0).unwrap(), 1);
|
|
assert_eq!(m.get(&1, 0).unwrap(), 2);
|
|
assert_eq!(m.get(&2, 0).unwrap(), 3);
|
|
}
|
|
|
|
#[test]
|
|
fn text_64_64_reloc() {
|
|
let kernel_version = KernelVersion::current().unwrap();
|
|
if kernel_version < KernelVersion::new(5, 13, 0) {
|
|
eprintln!("skipping test on kernel {kernel_version:?}, support for bpf_for_each_map_elem was added in 5.13.0; see https://github.com/torvalds/linux/commit/69c087b");
|
|
return;
|
|
}
|
|
|
|
let mut bpf = load_and_attach("test_text_64_64_reloc", crate::TEXT_64_64_RELOC);
|
|
|
|
let mut m = aya::maps::Array::<_, u64>::try_from(bpf.map_mut("RESULTS").unwrap()).unwrap();
|
|
m.set(0, 1, 0).unwrap();
|
|
m.set(1, 2, 0).unwrap();
|
|
|
|
trigger_relocations_program();
|
|
|
|
assert_eq!(m.get(&0, 0).unwrap(), 2);
|
|
assert_eq!(m.get(&1, 0).unwrap(), 3);
|
|
}
|
|
|
|
#[test]
|
|
fn variables_reloc() {
|
|
let mut bpf = Ebpf::load(crate::VARIABLES_RELOC).unwrap();
|
|
let prog: &mut Xdp = bpf
|
|
.program_mut("variables_reloc")
|
|
.unwrap()
|
|
.try_into()
|
|
.unwrap();
|
|
prog.load().unwrap();
|
|
}
|
|
|
|
fn load_and_attach(name: &str, bytes: &[u8]) -> Ebpf {
|
|
let mut bpf = Ebpf::load(bytes).unwrap();
|
|
|
|
let prog: &mut UProbe = bpf.program_mut(name).unwrap().try_into().unwrap();
|
|
prog.load().unwrap();
|
|
|
|
prog.attach(
|
|
Some("trigger_relocations_program"),
|
|
0,
|
|
"/proc/self/exe",
|
|
None,
|
|
)
|
|
.unwrap();
|
|
|
|
bpf
|
|
}
|
|
|
|
#[no_mangle]
|
|
#[inline(never)]
|
|
pub extern "C" fn trigger_relocations_program() {
|
|
core::hint::black_box(trigger_relocations_program);
|
|
}
|