|
@@ -54,6 +54,25 @@ fn relocate_enum() {
|
|
|
assert_eq!(test.run_no_btf().unwrap(), 0);
|
|
|
}
|
|
|
|
|
|
+#[integration_test]
|
|
|
+fn relocate_pointer() {
|
|
|
+ let test = RelocationTest {
|
|
|
+ local_definition: r#"
|
|
|
+ struct foo {};
|
|
|
+ struct bar { struct foo *f; };
|
|
|
+ "#,
|
|
|
+ target_btf: r#""#,
|
|
|
+ relocation_code: r#"
|
|
|
+ __u8 memory[] = {0, 0, 0, 0, 0, 0, 0, 42};
|
|
|
+ struct foo *f = BPF_CORE_READ((struct bar *)&memory, f);
|
|
|
+ __u32 value = (f == (struct foo *) 42);
|
|
|
+ "#,
|
|
|
+ }
|
|
|
+ .build()
|
|
|
+ .unwrap();
|
|
|
+ assert_eq!(test.run().unwrap(), 1);
|
|
|
+}
|
|
|
+
|
|
|
/// Utility code for running relocation tests:
|
|
|
/// - Generates the eBPF program using probided local definition and relocation code
|
|
|
/// - Generates the BTF from the target btf code
|