@@ -848,17 +848,17 @@ let collect_struct_definitions_from_multi_program ir_multi_prog =
848848 List. rev ! struct_defs
849849
850850(* * Generate struct definitions *)
851- let generate_struct_definitions ctx struct_defs =
851+ let generate_struct_definitions ?( btf_path = None ) ctx struct_defs =
852852 (* Filter out kernel-defined structs using centralized kernel type knowledge *)
853853 let user_defined_structs = List. filter (fun (struct_name , fields ) ->
854854 (* Check if this struct name is a well-known kernel type *)
855- let is_kernel_type = Kernel_types. is_well_known_ebpf_type struct_name in
855+ let is_kernel_type = Kernel_types. is_well_known_ebpf_type ?btf_path struct_name in
856856
857857 (* Check if this struct has kernel-defined field types *)
858858 let has_kernel_field = List. exists (fun (_field_name , field_type ) ->
859859 match field_type with
860- | IRStruct (name , _ ) -> Kernel_types. is_well_known_ebpf_type name
861- | IREnum (name , _ ) -> Kernel_types. is_well_known_ebpf_type name
860+ | IRStruct (name , _ ) -> Kernel_types. is_well_known_ebpf_type ?btf_path name
861+ | IREnum (name , _ ) -> Kernel_types. is_well_known_ebpf_type ?btf_path name
862862 | _ -> false
863863 ) fields in
864864
@@ -3539,7 +3539,7 @@ let generate_c_program ?_config_declarations ir_prog =
35393539
35403540(* * Generate complete C program from multiple IR programs *)
35413541
3542- let generate_c_multi_program ?_config_declarations ?(type_aliases =[] ) ?(variable_type_aliases =[] ) ir_multi_prog =
3542+ let generate_c_multi_program ?_config_declarations ?(type_aliases =[] ) ?(variable_type_aliases =[] ) ?( btf_path = None ) ir_multi_prog =
35433543 let ctx = create_c_context () in
35443544
35453545 (* Initialize modular context code generators *)
@@ -3566,7 +3566,7 @@ let generate_c_multi_program ?_config_declarations ?(type_aliases=[]) ?(variable
35663566
35673567 (* Generate struct definitions *)
35683568 let struct_defs = collect_struct_definitions_from_multi_program ir_multi_prog in
3569- generate_struct_definitions ctx struct_defs;
3569+ generate_struct_definitions ~btf_path ctx struct_defs;
35703570
35713571 (* Generate config maps from IR multi-program *)
35723572 if ir_multi_prog.global_configs <> [] then
@@ -3659,7 +3659,7 @@ let generate_prog_array_map ctx prog_array_size =
36593659
36603660(* * Compile multi-program IR to eBPF C code with automatic tail call detection *)
36613661let compile_multi_to_c_with_tail_calls
3662- ?(_config_declarations =[] ) ?(type_aliases =[] ) ?(variable_type_aliases =[] ) ?(kfunc_declarations =[] ) ?symbol_table ?(tail_call_analysis =None )
3662+ ?(_config_declarations =[] ) ?(type_aliases =[] ) ?(variable_type_aliases =[] ) ?(kfunc_declarations =[] ) ?symbol_table ?(tail_call_analysis =None ) ?( btf_path = None )
36633663 (ir_multi_prog : Ir.ir_multi_program ) =
36643664
36653665 let ctx = create_c_context () in
@@ -3759,7 +3759,7 @@ let compile_multi_to_c_with_tail_calls
37593759
37603760 (* Generate struct definitions *)
37613761 let struct_defs = collect_struct_definitions_from_multi_program ir_multi_prog in
3762- generate_struct_definitions ctx struct_defs;
3762+ generate_struct_definitions ~btf_path ctx struct_defs;
37633763
37643764 (* Generate global map definitions BEFORE functions that use them *)
37653765 List. iter (generate_map_definition ctx) ir_multi_prog.global_maps;
@@ -3834,10 +3834,10 @@ let compile_multi_to_c ?(_config_declarations=[]) ?(type_aliases=[]) ?(variable_
38343834
38353835(* * Multi-program compilation entry point that returns both code and tail call analysis *)
38363836
3837- let compile_multi_to_c_with_analysis ?(_config_declarations =[] ) ?(type_aliases =[] ) ?(variable_type_aliases =[] ) ?(kfunc_declarations =[] ) ?symbol_table ?(tail_call_analysis =None ) ir_multi_program =
3837+ let compile_multi_to_c_with_analysis ?(_config_declarations =[] ) ?(type_aliases =[] ) ?(variable_type_aliases =[] ) ?(kfunc_declarations =[] ) ?symbol_table ?(tail_call_analysis =None ) ?( btf_path = None ) ir_multi_program =
38383838 (* Always use the intelligent tail call compilation that auto-detects and handles tail calls *)
38393839 let (c_code, final_tail_call_analysis) = compile_multi_to_c_with_tail_calls
3840- ~type_aliases ~variable_type_aliases ~kfunc_declarations ?symbol_table ~tail_call_analysis ir_multi_program in
3840+ ~type_aliases ~variable_type_aliases ~kfunc_declarations ?symbol_table ~tail_call_analysis ~btf_path ir_multi_program in
38413841
38423842 (* Tail call analysis results calculated and stored *)
38433843 (c_code, final_tail_call_analysis)
0 commit comments