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 .license_pass import license_processing
|
||||||
from .functions_pass import func_proc
|
from .functions_pass import func_proc
|
||||||
from .maps_pass import maps_proc
|
from .maps_pass import maps_proc
|
||||||
|
from .structs_pass import structs_proc
|
||||||
from .globals_pass import globals_processing
|
from .globals_pass import globals_processing
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
@ -30,6 +31,7 @@ def processor(source_code, filename, module):
|
|||||||
for func_node in bpf_chunks:
|
for func_node in bpf_chunks:
|
||||||
print(f"Found BPF function/struct: {func_node.name}")
|
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)
|
map_sym_tab = maps_proc(tree, module, bpf_chunks)
|
||||||
func_proc(tree, module, bpf_chunks, map_sym_tab)
|
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:
|
for func_node in chunks:
|
||||||
is_global = False
|
is_global = False
|
||||||
for decorator in func_node.decorator_list:
|
for decorator in func_node.decorator_list:
|
||||||
if isinstance(decorator, ast.Name) and decorator.id == "map":
|
if isinstance(decorator, ast.Name) and decorator.id in ("map", "bpfglobal", "struct"):
|
||||||
is_global = True
|
|
||||||
break
|
|
||||||
elif isinstance(decorator, ast.Name) and decorator.id == "bpfglobal":
|
|
||||||
is_global = True
|
is_global = True
|
||||||
break
|
break
|
||||||
if is_global:
|
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