Skip to content

Commit 2e37726

Browse files
committed
Add signature relection for all helper handlers except print
1 parent 5b36726 commit 2e37726

File tree

2 files changed

+74
-14
lines changed

2 files changed

+74
-14
lines changed

pythonbpf/helper/bpf_helper_handler.py

Lines changed: 73 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ class BPFHelperID(Enum):
3737
BPF_PROBE_READ_KERNEL_STR = 115
3838

3939

40-
@HelperHandlerRegistry.register("ktime")
40+
@HelperHandlerRegistry.register(
41+
"ktime",
42+
param_types=[],
43+
return_type=ir.IntType(64),
44+
)
4145
def bpf_ktime_get_ns_emitter(
4246
call,
4347
map_ptr,
@@ -60,7 +64,11 @@ def bpf_ktime_get_ns_emitter(
6064
return result, ir.IntType(64)
6165

6266

63-
@HelperHandlerRegistry.register("lookup")
67+
@HelperHandlerRegistry.register(
68+
"lookup",
69+
param_types=[ir.PointerType(ir.IntType(64))],
70+
return_type=ir.PointerType(ir.IntType(64)),
71+
)
6472
def bpf_map_lookup_elem_emitter(
6573
call,
6674
map_ptr,
@@ -102,6 +110,7 @@ def bpf_map_lookup_elem_emitter(
102110
return result, ir.PointerType()
103111

104112

113+
# NOTE: This has special handling so we won't reflect the signature here.
105114
@HelperHandlerRegistry.register("print")
106115
def bpf_printk_emitter(
107116
call,
@@ -150,7 +159,15 @@ def bpf_printk_emitter(
150159
return True
151160

152161

153-
@HelperHandlerRegistry.register("update")
162+
@HelperHandlerRegistry.register(
163+
"update",
164+
param_types=[
165+
ir.PointerType(ir.IntType(64)),
166+
ir.PointerType(ir.IntType(64)),
167+
ir.IntType(64),
168+
],
169+
return_type=ir.PointerType(ir.IntType(64)),
170+
)
154171
def bpf_map_update_elem_emitter(
155172
call,
156173
map_ptr,
@@ -205,7 +222,11 @@ def bpf_map_update_elem_emitter(
205222
return result, None
206223

207224

208-
@HelperHandlerRegistry.register("delete")
225+
@HelperHandlerRegistry.register(
226+
"delete",
227+
param_types=[ir.PointerType(ir.IntType(64))],
228+
return_type=ir.PointerType(ir.IntType(64)),
229+
)
209230
def bpf_map_delete_elem_emitter(
210231
call,
211232
map_ptr,
@@ -245,7 +266,11 @@ def bpf_map_delete_elem_emitter(
245266
return result, None
246267

247268

248-
@HelperHandlerRegistry.register("comm")
269+
@HelperHandlerRegistry.register(
270+
"comm",
271+
param_types=[ir.PointerType(ir.IntType(8))],
272+
return_type=ir.IntType(64),
273+
)
249274
def bpf_get_current_comm_emitter(
250275
call,
251276
map_ptr,
@@ -302,7 +327,11 @@ def bpf_get_current_comm_emitter(
302327
return result, None
303328

304329

305-
@HelperHandlerRegistry.register("pid")
330+
@HelperHandlerRegistry.register(
331+
"pid",
332+
param_types=[],
333+
return_type=ir.IntType(64),
334+
)
306335
def bpf_get_current_pid_tgid_emitter(
307336
call,
308337
map_ptr,
@@ -330,7 +359,11 @@ def bpf_get_current_pid_tgid_emitter(
330359
return pid, ir.IntType(64)
331360

332361

333-
@HelperHandlerRegistry.register("output")
362+
@HelperHandlerRegistry.register(
363+
"output",
364+
param_types=[ir.PointerType(ir.IntType(8))],
365+
return_type=ir.IntType(64),
366+
)
334367
def bpf_perf_event_output_handler(
335368
call,
336369
map_ptr,
@@ -405,7 +438,14 @@ def emit_probe_read_kernel_str_call(builder, dst_ptr, dst_size, src_ptr):
405438
return result
406439

407440

408-
@HelperHandlerRegistry.register("probe_read_str")
441+
@HelperHandlerRegistry.register(
442+
"probe_read_str",
443+
param_types=[
444+
ir.PointerType(ir.IntType(8)),
445+
ir.PointerType(ir.IntType(8)),
446+
],
447+
return_type=ir.IntType(64),
448+
)
409449
def bpf_probe_read_kernel_str_emitter(
410450
call,
411451
map_ptr,
@@ -440,7 +480,11 @@ def bpf_probe_read_kernel_str_emitter(
440480
return result, ir.IntType(64)
441481

442482

443-
@HelperHandlerRegistry.register("random")
483+
@HelperHandlerRegistry.register(
484+
"random",
485+
param_types=[],
486+
return_type=ir.IntType(32),
487+
)
444488
def bpf_get_prandom_u32_emitter(
445489
call,
446490
map_ptr,
@@ -462,7 +506,15 @@ def bpf_get_prandom_u32_emitter(
462506
return result, ir.IntType(32)
463507

464508

465-
@HelperHandlerRegistry.register("probe_read")
509+
@HelperHandlerRegistry.register(
510+
"probe_read",
511+
param_types=[
512+
ir.PointerType(ir.IntType(8)),
513+
ir.IntType(32),
514+
ir.PointerType(ir.IntType(8)),
515+
],
516+
return_type=ir.IntType(64),
517+
)
466518
def bpf_probe_read_emitter(
467519
call,
468520
map_ptr,
@@ -517,7 +569,11 @@ def bpf_probe_read_emitter(
517569
return result, ir.IntType(64)
518570

519571

520-
@HelperHandlerRegistry.register("smp_processor_id")
572+
@HelperHandlerRegistry.register(
573+
"smp_processor_id",
574+
param_types=[],
575+
return_type=ir.IntType(32),
576+
)
521577
def bpf_get_smp_processor_id_emitter(
522578
call,
523579
map_ptr,
@@ -540,7 +596,11 @@ def bpf_get_smp_processor_id_emitter(
540596
return result, ir.IntType(32)
541597

542598

543-
@HelperHandlerRegistry.register("uid")
599+
@HelperHandlerRegistry.register(
600+
"uid",
601+
param_types=[],
602+
return_type=ir.IntType(64),
603+
)
544604
def bpf_get_current_uid_gid_emitter(
545605
call,
546606
map_ptr,
@@ -622,8 +682,8 @@ def bpf_skb_store_bytes_emitter(
622682
builder,
623683
local_sym_tab,
624684
map_sym_tab,
625-
args_signature[2],
626685
struct_sym_tab,
686+
args_signature[2],
627687
)
628688
len_val = get_int_value_from_arg(
629689
call.args[2],

pythonbpf/helper/helper_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ def get_or_create_ptr_from_arg(
138138
builder,
139139
local_sym_tab,
140140
map_sym_tab,
141-
expected_type=None,
142141
struct_sym_tab=None,
142+
expected_type=None,
143143
):
144144
"""Extract or create pointer from the call arguments."""
145145

0 commit comments

Comments
 (0)