22from llvmlite import ir
33from pythonbpf .expr_pass import eval_expr
44from enum import Enum
5- from .helper_utils import HelperHandlerRegistry , get_or_create_ptr_from_arg
5+ from .helper_utils import HelperHandlerRegistry , get_or_create_ptr_from_arg , get_flags_val
66
77
88class BPFHelperID (Enum ):
@@ -244,28 +244,7 @@ def bpf_map_update_elem_emitter(call, map_ptr, module, builder, func,
244244
245245 key_ptr = get_or_create_ptr_from_arg (key_arg , builder , local_sym_tab )
246246 value_ptr = get_or_create_ptr_from_arg (value_arg , builder , local_sym_tab )
247-
248- # Handle flags argument (defaults to 0)
249- if flags_arg is not None :
250- if isinstance (flags_arg , ast .Constant ) and isinstance (flags_arg .value , int ):
251- flags_val = flags_arg .value
252- elif isinstance (flags_arg , ast .Name ):
253- flags_name = flags_arg .id
254- if local_sym_tab and flags_name in local_sym_tab :
255- # Assume it's a stored integer value, load it
256- flags_ptr = local_sym_tab [flags_name ][0 ]
257- flags_val = builder .load (flags_ptr )
258- else :
259- raise ValueError (
260- f"Flags variable { flags_name } not found in local symbol table." )
261- else :
262- raise NotImplementedError (
263- "Only integer constants and simple variable names are supported as flags in map update." )
264- else :
265- flags_val = 0
266-
267- if key_ptr is None or value_ptr is None :
268- raise ValueError ("Key pointer or value pointer is None." )
247+ flags_val = get_flags_val (flags_arg , builder , local_sym_tab )
269248
270249 map_void_ptr = builder .bitcast (map_ptr , ir .PointerType ())
271250 fn_type = ir .FunctionType (
@@ -275,7 +254,6 @@ def bpf_map_update_elem_emitter(call, map_ptr, module, builder, func,
275254 )
276255 fn_ptr_type = ir .PointerType (fn_type )
277256
278- # helper id
279257 fn_addr = ir .Constant (ir .IntType (
280258 64 ), BPFHelperID .BPF_MAP_UPDATE_ELEM .value )
281259 fn_ptr = builder .inttoptr (fn_addr , fn_ptr_type )
0 commit comments