mirror of
https://github.com/varun-r-mallya/Python-BPF.git
synced 2025-12-31 21:06:25 +00:00
float assignments to class_handler.py
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from typing import Any, Callable, Dict, List, Optional, TypedDict
|
from typing import Any, Dict, List, Optional, TypedDict
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from pythonbpf.vmlinux_parser.dependency_node import Field
|
from pythonbpf.vmlinux_parser.dependency_node import Field
|
||||||
@ -13,6 +13,7 @@ class AssignmentType(Enum):
|
|||||||
FUNCTION_POINTER = auto()
|
FUNCTION_POINTER = auto()
|
||||||
POINTER = auto() # again, probably won't be used
|
POINTER = auto() # again, probably won't be used
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class FunctionSignature(TypedDict):
|
class FunctionSignature(TypedDict):
|
||||||
return_type: str
|
return_type: str
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
import logging
|
import logging
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
import importlib
|
import importlib
|
||||||
|
|
||||||
|
from .assignment_info import AssignmentInfo
|
||||||
from .dependency_handler import DependencyHandler
|
from .dependency_handler import DependencyHandler
|
||||||
from .dependency_node import DependencyNode
|
from .dependency_node import DependencyNode
|
||||||
import ctypes
|
import ctypes
|
||||||
@ -15,17 +17,26 @@ def get_module_symbols(module_name: str):
|
|||||||
return [name for name in dir(imported_module)], imported_module
|
return [name for name in dir(imported_module)], imported_module
|
||||||
|
|
||||||
|
|
||||||
def process_vmlinux_class(node, llvm_module, handler: DependencyHandler):
|
def process_vmlinux_class(
|
||||||
|
node,
|
||||||
|
llvm_module,
|
||||||
|
handler: DependencyHandler,
|
||||||
|
assignments: dict[str, AssignmentInfo],
|
||||||
|
):
|
||||||
symbols_in_module, imported_module = get_module_symbols("vmlinux")
|
symbols_in_module, imported_module = get_module_symbols("vmlinux")
|
||||||
if node.name in symbols_in_module:
|
if node.name in symbols_in_module:
|
||||||
vmlinux_type = getattr(imported_module, node.name)
|
vmlinux_type = getattr(imported_module, node.name)
|
||||||
process_vmlinux_post_ast(vmlinux_type, llvm_module, handler)
|
process_vmlinux_post_ast(vmlinux_type, llvm_module, handler, assignments)
|
||||||
else:
|
else:
|
||||||
raise ImportError(f"{node.name} not in vmlinux")
|
raise ImportError(f"{node.name} not in vmlinux")
|
||||||
|
|
||||||
|
|
||||||
def process_vmlinux_post_ast(
|
def process_vmlinux_post_ast(
|
||||||
elem_type_class, llvm_handler, handler: DependencyHandler, processing_stack=None
|
elem_type_class,
|
||||||
|
llvm_handler,
|
||||||
|
handler: DependencyHandler,
|
||||||
|
assignments: dict[str, AssignmentInfo],
|
||||||
|
processing_stack=None,
|
||||||
):
|
):
|
||||||
# Initialize processing stack on first call
|
# Initialize processing stack on first call
|
||||||
if processing_stack is None:
|
if processing_stack is None:
|
||||||
@ -46,7 +57,7 @@ def process_vmlinux_post_ast(
|
|||||||
logger.debug(f"Node {current_symbol_name} already processed and ready")
|
logger.debug(f"Node {current_symbol_name} already processed and ready")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# XXX:Check it's use. It's probably not being used.
|
# XXX:Check its use. It's probably not being used.
|
||||||
if current_symbol_name in processing_stack:
|
if current_symbol_name in processing_stack:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"Dependency already in processing stack for {current_symbol_name}, skipping"
|
f"Dependency already in processing stack for {current_symbol_name}, skipping"
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import ast
|
import ast
|
||||||
import logging
|
import logging
|
||||||
from typing import List, Tuple, Any
|
|
||||||
import importlib
|
import importlib
|
||||||
import inspect
|
import inspect
|
||||||
|
|
||||||
@ -12,7 +11,7 @@ from .class_handler import process_vmlinux_class
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def detect_import_statement(tree: ast.AST) -> List[Tuple[str, ast.ImportFrom]]:
|
def detect_import_statement(tree: ast.AST) -> list[tuple[str, ast.ImportFrom]]:
|
||||||
"""
|
"""
|
||||||
Parse AST and detect import statements from vmlinux.
|
Parse AST and detect import statements from vmlinux.
|
||||||
|
|
||||||
@ -113,7 +112,7 @@ def vmlinux_proc(tree: ast.AST, module):
|
|||||||
isinstance(mod_node, ast.ClassDef)
|
isinstance(mod_node, ast.ClassDef)
|
||||||
and mod_node.name == imported_name
|
and mod_node.name == imported_name
|
||||||
):
|
):
|
||||||
process_vmlinux_class(mod_node, module, handler)
|
process_vmlinux_class(mod_node, module, handler, assignments)
|
||||||
found = True
|
found = True
|
||||||
break
|
break
|
||||||
if isinstance(mod_node, ast.Assign):
|
if isinstance(mod_node, ast.Assign):
|
||||||
@ -148,7 +147,7 @@ def process_vmlinux_assign(node, module, assignments: dict[str, AssignmentInfo])
|
|||||||
value=node.value.value,
|
value=node.value.value,
|
||||||
pointer_level=None,
|
pointer_level=None,
|
||||||
signature=None,
|
signature=None,
|
||||||
members=None
|
members=None,
|
||||||
)
|
)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Added assignment: {target_name} = {node.value.value!r} of type {type(node.value.value)}"
|
f"Added assignment: {target_name} = {node.value.value!r} of type {type(node.value.value)}"
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
from pythonbpf import bpf, section, bpfglobal, compile_to_ir, compile
|
from pythonbpf import bpf, section, bpfglobal, compile_to_ir
|
||||||
from vmlinux import TASK_COMM_LEN # noqa: F401
|
from vmlinux import TASK_COMM_LEN # noqa: F401
|
||||||
from vmlinux import struct_trace_event_raw_sys_enter # noqa: F401
|
from vmlinux import struct_trace_event_raw_sys_enter # noqa: F401
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user