|  |  |  | @ -6,6 +6,9 @@ use aya::{maps::Array, programs::TracePoint, BpfLoader, Btf, Endianness}; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | use super::{integration_test, IntegrationTest}; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | // In the tests below we often use values like 0xAAAAAAAA or -0x7AAAAAAA. Those values have no
 | 
		
	
		
			
				|  |  |  |  | // special meaning, they just have "nice" bit patterns that can be helpful while debugging.
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #[integration_test] | 
		
	
		
			
				|  |  |  |  | fn relocate_field() { | 
		
	
		
			
				|  |  |  |  |     let test = RelocationTest { | 
		
	
	
		
			
				
					|  |  |  | @ -41,10 +44,30 @@ fn relocate_field() { | 
		
	
		
			
				|  |  |  |  | fn relocate_enum() { | 
		
	
		
			
				|  |  |  |  |     let test = RelocationTest { | 
		
	
		
			
				|  |  |  |  |         local_definition: r#" | 
		
	
		
			
				|  |  |  |  |             enum foo { D = 1 }; | 
		
	
		
			
				|  |  |  |  |             enum foo { D = 0xAAAAAAAA }; | 
		
	
		
			
				|  |  |  |  |         "#, | 
		
	
		
			
				|  |  |  |  |         target_btf: r#" | 
		
	
		
			
				|  |  |  |  |             enum foo { D = 0xBBBBBBBB } e1; | 
		
	
		
			
				|  |  |  |  |         "#, | 
		
	
		
			
				|  |  |  |  |         relocation_code: r#" | 
		
	
		
			
				|  |  |  |  |             #define BPF_ENUMVAL_VALUE 1 | 
		
	
		
			
				|  |  |  |  |             value = __builtin_preserve_enum_value(*(typeof(enum foo) *)D, BPF_ENUMVAL_VALUE); | 
		
	
		
			
				|  |  |  |  |         "#, | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     .build() | 
		
	
		
			
				|  |  |  |  |     .unwrap(); | 
		
	
		
			
				|  |  |  |  |     assert_eq!(test.run().unwrap(), 0xBBBBBBBB); | 
		
	
		
			
				|  |  |  |  |     assert_eq!(test.run_no_btf().unwrap(), 0xAAAAAAAA); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #[integration_test] | 
		
	
		
			
				|  |  |  |  | fn relocate_enum_signed() { | 
		
	
		
			
				|  |  |  |  |     let test = RelocationTest { | 
		
	
		
			
				|  |  |  |  |         local_definition: r#" | 
		
	
		
			
				|  |  |  |  |             enum foo { D = -0x7AAAAAAA }; | 
		
	
		
			
				|  |  |  |  |         "#, | 
		
	
		
			
				|  |  |  |  |         target_btf: r#" | 
		
	
		
			
				|  |  |  |  |             enum foo { D = 4 } e1; | 
		
	
		
			
				|  |  |  |  |             enum foo { D = -0x7BBBBBBB } e1; | 
		
	
		
			
				|  |  |  |  |         "#, | 
		
	
		
			
				|  |  |  |  |         relocation_code: r#" | 
		
	
		
			
				|  |  |  |  |             #define BPF_ENUMVAL_VALUE 1 | 
		
	
	
		
			
				
					|  |  |  | @ -53,8 +76,8 @@ fn relocate_enum() { | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     .build() | 
		
	
		
			
				|  |  |  |  |     .unwrap(); | 
		
	
		
			
				|  |  |  |  |     assert_eq!(test.run().unwrap(), 4); | 
		
	
		
			
				|  |  |  |  |     assert_eq!(test.run_no_btf().unwrap(), 1); | 
		
	
		
			
				|  |  |  |  |     assert_eq!(test.run().unwrap() as i64, -0x7BBBBBBBi64); | 
		
	
		
			
				|  |  |  |  |     assert_eq!(test.run_no_btf().unwrap() as i64, -0x7AAAAAAAi64); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #[integration_test] | 
		
	
	
		
			
				
					|  |  |  | 
 |