diff --git a/examples/sys_sync.py b/examples/sys_sync.py index 3b65f46..0f56153 100644 --- a/examples/sys_sync.py +++ b/examples/sys_sync.py @@ -21,17 +21,17 @@ def last() -> HashMap: @section("tracepoint/syscalls/sys_enter_sync") def do_trace(ctx: c_void_p) -> c_int64: key = 0 - tsp = last().lookup(key) + tsp = last.lookup(key) if tsp: kt = ktime() delta = kt - tsp if delta < 1000000000: time_ms = delta // 1000000 print(f"sync called within last second, last {time_ms} ms ago") - last().delete(key) + last.delete(key) else: kt = ktime() - last().update(key, kt) + last.update(key, kt) return c_int64(0) diff --git a/pythonbpf/functions_pass.py b/pythonbpf/functions_pass.py index 37728e1..6653677 100644 --- a/pythonbpf/functions_pass.py +++ b/pythonbpf/functions_pass.py @@ -192,8 +192,23 @@ def handle_assign( elif isinstance(rval.func, ast.Attribute): logger.info(f"Assignment call attribute: {ast.dump(rval.func)}") if isinstance(rval.func.value, ast.Name): - # TODO: probably a struct access - logger.info(f"TODO STRUCT ACCESS {ast.dump(rval)}") + if rval.func.value.id in map_sym_tab: + map_name = rval.func.value.id + method_name = rval.func.attr + if HelperHandlerRegistry.has_handler(method_name): + val = handle_helper_call( + rval, + module, + builder, + func, + local_sym_tab, + map_sym_tab, + structs_sym_tab, + ) + builder.store(val[0], local_sym_tab[var_name].var) + else: + # TODO: probably a struct access + logger.info(f"TODO STRUCT ACCESS {ast.dump(rval)}") elif isinstance(rval.func.value, ast.Call) and isinstance( rval.func.value.func, ast.Name ):