diff --git a/test/integration-test/src/tests/load.rs b/test/integration-test/src/tests/load.rs index 4c366e46..337f9162 100644 --- a/test/integration-test/src/tests/load.rs +++ b/test/integration-test/src/tests/load.rs @@ -195,7 +195,9 @@ fn basic_uprobe() { prog.load().unwrap(); assert_loaded!("test_uprobe", true); - let link = prog.attach(Some("sleep"), 0, "libc", None).unwrap(); + let link = prog + .attach(Some("uprobe_function"), 0, "/proc/self/exe", None) + .unwrap(); { let _link_owned = prog.take_link(link).unwrap(); @@ -207,7 +209,8 @@ fn basic_uprobe() { prog.load().unwrap(); assert_loaded!("test_uprobe", true); - prog.attach(Some("sleep"), 0, "libc", None).unwrap(); + prog.attach(Some("uprobe_function"), 0, "/proc/self/exe", None) + .unwrap(); assert_loaded!("test_uprobe", true); prog.unload().unwrap(); @@ -418,14 +421,23 @@ fn pin_lifecycle_kprobe() { assert_loaded!("test_kprobe", false); } +#[no_mangle] +#[inline(never)] +extern "C" fn uprobe_function() { + core::hint::black_box(uprobe_function); +} + #[test] fn pin_lifecycle_uprobe() { + const FIRST_PIN_PATH: &str = "/sys/fs/bpf/aya-uprobe-test-prog-1"; + const SECOND_PIN_PATH: &str = "/sys/fs/bpf/aya-uprobe-test-prog-2"; + // 1. Load Program and Pin { let mut bpf = Bpf::load(crate::TEST).unwrap(); let prog: &mut UProbe = bpf.program_mut("test_uprobe").unwrap().try_into().unwrap(); prog.load().unwrap(); - prog.pin("/sys/fs/bpf/aya-uprobe-test-prog").unwrap(); + prog.pin(FIRST_PIN_PATH).unwrap(); } // should still be loaded since prog was pinned @@ -433,11 +445,7 @@ fn pin_lifecycle_uprobe() { // 2. Load program from bpffs but don't attach it { - let _ = UProbe::from_pin( - "/sys/fs/bpf/aya-uprobe-test-prog", - aya::programs::ProbeKind::UProbe, - ) - .unwrap(); + let _ = UProbe::from_pin(FIRST_PIN_PATH, aya::programs::ProbeKind::UProbe).unwrap(); } // should still be loaded since prog was pinned @@ -445,17 +453,13 @@ fn pin_lifecycle_uprobe() { // 3. Load program from bpffs and attach { - let mut prog = UProbe::from_pin( - "/sys/fs/bpf/aya-uprobe-test-prog", - aya::programs::ProbeKind::UProbe, - ) - .unwrap(); - let link_id = prog.attach(Some("sleep"), 0, "libc", None).unwrap(); + let mut prog = UProbe::from_pin(FIRST_PIN_PATH, aya::programs::ProbeKind::UProbe).unwrap(); + let link_id = prog + .attach(Some("uprobe_function"), 0, "/proc/self/exe", None) + .unwrap(); let link = prog.take_link(link_id).unwrap(); let fd_link: FdLink = link.try_into().unwrap(); - fd_link - .pin("/sys/fs/bpf/aya-uprobe-test-bash-sleep") - .unwrap(); + fd_link.pin(SECOND_PIN_PATH).unwrap(); // Unpin the program. It will stay attached since its links were pinned. prog.unpin().unwrap(); @@ -466,7 +470,7 @@ fn pin_lifecycle_uprobe() { // 4. unpin link, and make sure everything is unloaded { - PinnedLink::from_pin("/sys/fs/bpf/aya-uprobe-test-bash-sleep") + PinnedLink::from_pin(SECOND_PIN_PATH) .unwrap() .unpin() .unwrap(); @@ -474,4 +478,7 @@ fn pin_lifecycle_uprobe() { // program should be unloaded assert_loaded!("test_uprobe", false); + + // Make sure the function isn't optimized out. + uprobe_function(); }