Skip to content

Commit ffcd2de

Browse files
committed
Replace usage of get_key_ptr with get_or_create_ptr_from_arg
1 parent 8dd2746 commit ffcd2de

2 files changed

Lines changed: 7 additions & 24 deletions

File tree

pythonbpf/helper/bpf_helper_handler.py

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from llvmlite import ir
33
from pythonbpf.expr_pass import eval_expr
44
from enum import Enum
5-
from .helper_utils import HelperHandlerRegistry, get_key_ptr
5+
from .helper_utils import HelperHandlerRegistry, get_or_create_ptr_from_arg
66

77

88
class BPFHelperID(Enum):
@@ -41,7 +41,7 @@ def bpf_map_lookup_elem_emitter(call, map_ptr, module, builder, func,
4141
if not call.args or len(call.args) != 1:
4242
raise ValueError("Map lookup expects exactly one argument (key), got "
4343
f"{len(call.args)}")
44-
key_ptr = get_key_ptr(call.args[0], builder, local_sym_tab)
44+
key_ptr = get_or_create_ptr_from_arg(call.args[0], builder, local_sym_tab)
4545
map_void_ptr = builder.bitcast(map_ptr, ir.PointerType())
4646

4747
fn_type = ir.FunctionType(
@@ -242,25 +242,8 @@ def bpf_map_update_elem_emitter(call, map_ptr, module, builder, func,
242242
value_arg = call.args[1]
243243
flags_arg = call.args[2] if len(call.args) > 2 else None
244244

245-
key_ptr = get_key_ptr(key_arg, builder, local_sym_tab)
246-
# Handle value
247-
if isinstance(value_arg, ast.Name):
248-
value_name = value_arg.id
249-
if local_sym_tab and value_name in local_sym_tab:
250-
value_ptr = local_sym_tab[value_name][0]
251-
else:
252-
raise ValueError(
253-
f"Value variable {value_name} not found in local symbol table.")
254-
elif isinstance(value_arg, ast.Constant) and isinstance(value_arg.value, int):
255-
# Handle constant integers
256-
value_val = value_arg.value
257-
value_type = ir.IntType(64)
258-
value_ptr = builder.alloca(value_type)
259-
value_ptr.align = value_type.width // 8
260-
builder.store(ir.Constant(value_type, value_val), value_ptr)
261-
else:
262-
raise NotImplementedError(
263-
"Only simple variable names and integer constants are supported as values in map update.")
245+
key_ptr = get_or_create_ptr_from_arg(key_arg, builder, local_sym_tab)
246+
value_ptr = get_or_create_ptr_from_arg(value_arg, builder, local_sym_tab)
264247

265248
# Handle flags argument (defaults to 0)
266249
if flags_arg is not None:
@@ -319,7 +302,7 @@ def bpf_map_delete_elem_emitter(call, map_ptr, module, builder, func,
319302
if not call.args or len(call.args) != 1:
320303
raise ValueError("Map delete expects exactly one argument (key), got "
321304
f"{len(call.args)}")
322-
key_ptr = get_key_ptr(call.args[0], builder, local_sym_tab)
305+
key_ptr = get_or_create_ptr_from_arg(call.args[0], builder, local_sym_tab)
323306
map_void_ptr = builder.bitcast(map_ptr, ir.PointerType())
324307

325308
# Define function type for bpf_map_delete_elem

pythonbpf/helper/helper_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ def create_int_constant_ptr(value, builder, int_width=64):
3838

3939

4040
def get_or_create_ptr_from_arg(arg, builder, local_sym_tab):
41-
"""Extract key pointer from the call arguments."""
41+
"""Extract or create pointer from the call arguments."""
4242

4343
if isinstance(arg, ast.Name):
4444
ptr = get_var_ptr_from_name(arg.id, local_sym_tab)
4545
elif isinstance(arg, ast.Constant) and isinstance(arg.value, int):
4646
ptr = create_int_constant_ptr(arg.value, builder)
4747
else:
4848
raise NotImplementedError(
49-
"Only simple variable names are supported as keys in map lookup.")
49+
"Only simple variable names are supported as args in map helpers.")
5050
return ptr

0 commit comments

Comments
 (0)