From ac7f8e09f855b1c13d849a2933d5c757aca490ab Mon Sep 17 00:00:00 2001 From: Pragyansh Chaturvedi Date: Sat, 6 Sep 2025 13:33:43 +0530 Subject: [PATCH] Implement bpf chunk ID --- examples/execve2.py | 3 ++- pythonbpf/codegen.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/examples/execve2.py b/examples/execve2.py index d04ea3c..bbeaba6 100644 --- a/examples/execve2.py +++ b/examples/execve2.py @@ -1,10 +1,11 @@ -from pythonbpf.decorators import section +from pythonbpf.decorators import bpf, section # from pythonbpf.decorators import tracepoint, syscalls from ctypes import c_void_p, c_int32 # @tracepoint(syscalls.sys_enter_execve) +@bpf @section("kprobe/sys_clone") def hello(ctx: c_void_p) -> c_int32: print("Hello, World!") diff --git a/pythonbpf/codegen.py b/pythonbpf/codegen.py index 5b34836..b4163be 100644 --- a/pythonbpf/codegen.py +++ b/pythonbpf/codegen.py @@ -6,10 +6,26 @@ from .constants_pass import constants_processing from .globals_pass import globals_processing +def find_bpf_chunks(tree): + """Find all functions decorated with @bpf in the AST.""" + bpf_functions = [] + for node in ast.walk(tree): + if isinstance(node, ast.FunctionDef): + for decorator in node.decorator_list: + if isinstance(decorator, ast.Name) and decorator.id == "bpf": + bpf_functions.append(node) + break + return bpf_functions + + def processor(source_code, filename, module): tree = ast.parse(source_code, filename) print(ast.dump(tree, indent=4)) + bpf_chunks = find_bpf_chunks(tree) + for func_node in bpf_chunks: + print(f"Found BPF function: {func_node.name}") + # For now, we will parse the BPF specific parts of AST # Big rewrite