Skip to content

Commit e9178bf

Browse files
committed
Refactor include generation in eBPF code generation to prioritize essential kernel types. Update kprobe includes to ensure consistent inclusion of necessary headers.
1 parent b0dfa99 commit e9178bf

2 files changed

Lines changed: 11 additions & 5 deletions

File tree

src/context/kprobe_codegen.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,11 @@ let kprobe_field_mappings = [
9696

9797
(** Generate kprobe-specific includes *)
9898
let generate_kprobe_includes () = [
99+
"#include <linux/types.h>";
99100
"#include <linux/bpf.h>";
100-
"#include <bpf/bpf_helpers.h>";
101101
"#include <linux/ptrace.h>";
102102
"#include <bpf/bpf_tracing.h>";
103+
"#include <bpf/bpf_helpers.h>";
103104
]
104105

105106
(** Generate field access for kprobe context *)

src/ebpf_c_codegen.ml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1044,14 +1044,18 @@ let generate_declarations_in_source_order ctx _ir_multi_program type_aliases =
10441044
(** Generate standard eBPF includes *)
10451045

10461046
let generate_includes ctx ?(program_types=[]) ?(include_builtin_headers=false) () =
1047+
(* Essential kernel types must come first *)
1048+
let base_type_includes = [
1049+
"#include <linux/types.h>";
1050+
] in
1051+
10471052
let standard_includes = [
10481053
"#include <linux/bpf.h>";
10491054
"#include <bpf/bpf_helpers.h>";
10501055
"#include <linux/if_ether.h>";
10511056
"#include <linux/ip.h>";
10521057
"#include <linux/in.h>";
10531058
"#include <linux/if_xdp.h>";
1054-
"#include <linux/types.h>";
10551059
] in
10561060

10571061
(* Get context-specific includes *)
@@ -1069,9 +1073,10 @@ let generate_includes ctx ?(program_types=[]) ?(include_builtin_headers=false) (
10691073
| None -> acc
10701074
) [] program_types in
10711075

1072-
(* Remove duplicates between standard and context includes *)
1076+
(* Remove duplicates between all include sets *)
1077+
let all_base_includes = base_type_includes @ standard_includes in
10731078
let unique_context_includes = List.filter (fun inc ->
1074-
not (List.mem inc standard_includes)) context_includes in
1079+
not (List.mem inc all_base_includes)) context_includes in
10751080

10761081
(* Only add builtin headers if explicitly requested (for debugging/testing) *)
10771082
let builtin_includes = if include_builtin_headers then
@@ -1086,7 +1091,7 @@ let generate_includes ctx ?(program_types=[]) ?(include_builtin_headers=false) (
10861091
[] (* Skip builtin headers - enum constants come from system headers *)
10871092
in
10881093

1089-
let all_includes = standard_includes @ unique_context_includes @ (List.rev builtin_includes) in
1094+
let all_includes = (List.rev builtin_includes) @ standard_includes @ unique_context_includes @ base_type_includes in
10901095
List.iter (fun inc -> ctx.output_lines <- inc :: ctx.output_lines) (List.rev all_includes);
10911096
emit_blank_line ctx
10921097

0 commit comments

Comments
 (0)