diff --git a/pythonbpf/bpf_helper_handler.py b/pythonbpf/bpf_helper_handler.py index 462e5c0..44a6aba 100644 --- a/pythonbpf/bpf_helper_handler.py +++ b/pythonbpf/bpf_helper_handler.py @@ -16,7 +16,7 @@ def bpf_ktime_get_ns_emitter(call, map_ptr, module, builder, func, local_sym_tab return result -def bpf_map_lookup_elem_emitter(call, map_ptr, module, builder, local_sym_tab=None): +def bpf_map_lookup_elem_emitter(call, map_ptr, module, builder, local_sym_tab=None, struct_sym_tab=None): """ Emit LLVM IR for bpf_map_lookup_elem helper function call. """ @@ -172,7 +172,7 @@ def bpf_printk_emitter(call, map_ptr, module, builder, func, local_sym_tab=None) ir.IntType(32), len(fmt_str))], tail=True) -def bpf_map_update_elem_emitter(call, map_ptr, module, builder, local_sym_tab=None): +def bpf_map_update_elem_emitter(call, map_ptr, module, builder, local_sym_tab=None, struct_sym_tab=None): """ Emit LLVM IR for bpf_map_update_elem helper function call. Expected call signature: map.update(key, value, flags=0) @@ -268,7 +268,7 @@ def bpf_map_update_elem_emitter(call, map_ptr, module, builder, local_sym_tab=No return result -def bpf_map_delete_elem_emitter(call, map_ptr, module, builder, local_sym_tab=None): +def bpf_map_delete_elem_emitter(call, map_ptr, module, builder, local_sym_tab=None, struct_sym_tab=None): """ Emit LLVM IR for bpf_map_delete_elem helper function call. Expected call signature: map.delete(key) @@ -340,7 +340,7 @@ def bpf_get_current_pid_tgid_emitter(call, map_ptr, module, builder, func, local return pid -def bpf_perf_event_output_handler(call, map_ptr, module, builder, local_sym_tab=None): +def bpf_perf_event_output_handler(call, map_ptr, module, builder, local_sym_tab=None, struct_sym_tab=None): pass @@ -355,7 +355,7 @@ helper_func_list = { } -def handle_helper_call(call, module, builder, func, local_sym_tab=None, map_sym_tab=None): +def handle_helper_call(call, module, builder, func, local_sym_tab=None, map_sym_tab=None, struct_sym_tab=None): if isinstance(call.func, ast.Name): func_name = call.func.id if func_name in helper_func_list: @@ -373,7 +373,7 @@ def handle_helper_call(call, module, builder, func, local_sym_tab=None, map_sym_ map_ptr = map_sym_tab[map_name] if method_name in helper_func_list: return helper_func_list[method_name]( - call, map_ptr, module, builder, local_sym_tab) + call, map_ptr, module, builder, local_sym_tab, struct_sym_tab) else: raise NotImplementedError( f"Map method {method_name} is not implemented as a helper function.") diff --git a/pythonbpf/functions_pass.py b/pythonbpf/functions_pass.py index 952648d..5a45422 100644 --- a/pythonbpf/functions_pass.py +++ b/pythonbpf/functions_pass.py @@ -100,7 +100,7 @@ def handle_assign(func, module, builder, stmt, map_sym_tab, local_sym_tab, struc # var = builder.alloca(ir.IntType(64), name=var_name) # var.align = 8 val = handle_helper_call( - rval, module, builder, None, local_sym_tab, map_sym_tab) + rval, module, builder, None, local_sym_tab, map_sym_tab, structs_sym_tab) builder.store(val, local_sym_tab[var_name]) # local_sym_tab[var_name] = var print(f"Assigned constant {rval.func.id} to {var_name}") @@ -139,7 +139,7 @@ def handle_assign(func, module, builder, stmt, map_sym_tab, local_sym_tab, struc map_ptr = map_sym_tab[map_name] if method_name in helper_func_list: val = handle_helper_call( - rval, module, builder, func, local_sym_tab, map_sym_tab) + rval, module, builder, func, local_sym_tab, map_sym_tab, structs_sym_tab) # var = builder.alloca(ir.IntType(64), name=var_name) # var.align = 8 builder.store(val, local_sym_tab[var_name])