@ -617,12 +617,12 @@ pub(crate) fn is_perf_link_supported() -> bool {
 
		
	
		
			
				     u . prog_type   =   bpf_prog_type ::BPF_PROG_TYPE_TRACEPOINT   as   u32 ;  
		
	
		
			
				
 
		
	
		
			
				     if   let   Ok ( fd )   =   sys_bpf ( bpf_cmd ::BPF_PROG_LOAD ,   & attr )   {  
		
	
		
			
				         if   let   Err ( ( code,   _  ) )   =  
		
	
		
			
				         if   let   Err ( ( _,   e  ) )   =  
		
	
		
			
				             // Uses an invalid target FD so we get EBADF if supported.
  
		
	
		
			
				             bpf_link_create ( fd   as   i32 ,   - 1 ,   bpf_attach_type ::BPF_PERF_EVENT ,   None ,   0 )  
		
	
		
			
				         {  
		
	
		
			
				             // Returns EINVAL if unsupported. EBADF if supported.
  
		
	
		
			
				             let   res   =   code  = =   ( - libc ::EBADF ) . into (  ) ;  
		
	
		
			
				             let   res   =   e. raw_os_error ( )   = =   Some ( libc ::EBADF  ) ;  
		
	
		
			
				             unsafe   {   libc ::close ( fd   as   i32 )   } ;  
		
	
		
			
				             return   res ;  
		
	
		
			
				         }  
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -892,3 +892,33 @@ where
 
		
	
		
			
				         }  
		
	
		
			
				     }  
		
	
		
			
				}  
		
	
		
			
				
 
		
	
		
			
				#[ cfg(test) ]  
		
	
		
			
				mod  tests   {  
		
	
		
			
				     use   super ::* ;  
		
	
		
			
				     use   crate ::sys ::override_syscall ;  
		
	
		
			
				     use   libc ::{ EBADF ,   EINVAL } ;  
		
	
		
			
				
 
		
	
		
			
				     #[ test ]  
		
	
		
			
				     fn  test_perf_link_supported ( )   {  
		
	
		
			
				         override_syscall ( | call |   match   call   {  
		
	
		
			
				             Syscall ::Bpf   {  
		
	
		
			
				                 cmd : bpf_cmd ::BPF_LINK_CREATE ,  
		
	
		
			
				                 ..  
		
	
		
			
				             }   = >   Err ( ( - 1 ,   io ::Error ::from_raw_os_error ( EBADF ) ) ) ,  
		
	
		
			
				             _   = >   Ok ( 42 ) ,  
		
	
		
			
				         } ) ;  
		
	
		
			
				         let   supported   =   is_perf_link_supported ( ) ;  
		
	
		
			
				         assert! ( supported ) ;  
		
	
		
			
				
 
		
	
		
			
				         override_syscall ( | call |   match   call   {  
		
	
		
			
				             Syscall ::Bpf   {  
		
	
		
			
				                 cmd : bpf_cmd ::BPF_LINK_CREATE ,  
		
	
		
			
				                 ..  
		
	
		
			
				             }   = >   Err ( ( - 1 ,   io ::Error ::from_raw_os_error ( EINVAL ) ) ) ,  
		
	
		
			
				             _   = >   Ok ( 42 ) ,  
		
	
		
			
				         } ) ;  
		
	
		
			
				         let   supported   =   is_perf_link_supported ( ) ;  
		
	
		
			
				         assert! ( ! supported ) ;  
		
	
		
			
				     }  
		
	
		
			
				}