Add structs_pass, tweak functions_pass to respect structs

This commit is contained in:
Pragyansh Chaturvedi
2025-09-21 03:29:05 +05:30
parent 780f53cd3f
commit 9fc939cb8e
3 changed files with 23 additions and 4 deletions

View File

@ -3,6 +3,7 @@ from llvmlite import ir
from .license_pass import license_processing
from .functions_pass import func_proc
from .maps_pass import maps_proc
from .structs_pass import structs_proc
from .globals_pass import globals_processing
import os
import subprocess
@ -30,6 +31,7 @@ def processor(source_code, filename, module):
for func_node in bpf_chunks:
print(f"Found BPF function/struct: {func_node.name}")
structs_sym_tab = structs_proc(tree, module, bpf_chunks)
map_sym_tab = maps_proc(tree, module, bpf_chunks)
func_proc(tree, module, bpf_chunks, map_sym_tab)

View File

@ -401,10 +401,7 @@ def func_proc(tree, module, chunks, map_sym_tab):
for func_node in chunks:
is_global = False
for decorator in func_node.decorator_list:
if isinstance(decorator, ast.Name) and decorator.id == "map":
is_global = True
break
elif isinstance(decorator, ast.Name) and decorator.id == "bpfglobal":
if isinstance(decorator, ast.Name) and decorator.id in ("map", "bpfglobal", "struct"):
is_global = True
break
if is_global:

20
pythonbpf/structs_pass.py Normal file
View File

@ -0,0 +1,20 @@
import ast
from llvmlite import ir
from .type_deducer import ctypes_to_ir
from . import dwarf_constants as dc
structs_sym_tab = {}
def structs_proc(tree, module, chunks):
for cls_node in chunks:
# Check if this class is a struct
is_struct = False
for decorator in cls_node.decorator_list:
if isinstance(decorator, ast.Name) and decorator.id == "struct":
is_struct = True
break
if is_struct:
print(f"Found BPF struct: {cls_node.name}")
continue
return structs_sym_tab