mirror of
https://github.com/varun-r-mallya/Python-BPF.git
synced 2025-12-31 21:06:25 +00:00
Add structs_pass, tweak functions_pass to respect structs
This commit is contained in:
@ -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)
|
||||
|
||||
|
||||
@ -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
20
pythonbpf/structs_pass.py
Normal 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
|
||||
Reference in New Issue
Block a user