mirror of
https://github.com/varun-r-mallya/Python-BPF.git
synced 2026-02-12 16:10:59 +00:00
Compare commits
3 Commits
f41693bc6d
...
9e1142bf05
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e1142bf05 | |||
| 1843ca6c53 | |||
| caa5d92c32 |
@ -43,7 +43,6 @@ def _handle_attribute_expr(
|
|||||||
var_ptr, var_type, var_metadata = local_sym_tab[var_name]
|
var_ptr, var_type, var_metadata = local_sym_tab[var_name]
|
||||||
logger.info(f"Loading attribute {attr_name} from variable {var_name}")
|
logger.info(f"Loading attribute {attr_name} from variable {var_name}")
|
||||||
logger.info(f"Variable type: {var_type}, Variable ptr: {var_ptr}")
|
logger.info(f"Variable type: {var_type}, Variable ptr: {var_ptr}")
|
||||||
|
|
||||||
metadata = structs_sym_tab[var_metadata]
|
metadata = structs_sym_tab[var_metadata]
|
||||||
if attr_name in metadata.fields:
|
if attr_name in metadata.fields:
|
||||||
gep = metadata.gep(builder, var_ptr, attr_name)
|
gep = metadata.gep(builder, var_ptr, attr_name)
|
||||||
|
|||||||
@ -240,9 +240,13 @@ def handle_assign(
|
|||||||
logger.info("Unsupported assignment value type")
|
logger.info("Unsupported assignment value type")
|
||||||
|
|
||||||
|
|
||||||
def handle_cond(func, module, builder, cond, local_sym_tab, map_sym_tab):
|
def handle_cond(
|
||||||
|
func, module, builder, cond, local_sym_tab, map_sym_tab, structs_sym_tab=None
|
||||||
|
):
|
||||||
if True:
|
if True:
|
||||||
val = eval_expr(func, module, builder, cond, local_sym_tab, map_sym_tab)[0]
|
val = eval_expr(
|
||||||
|
func, module, builder, cond, local_sym_tab, map_sym_tab, structs_sym_tab
|
||||||
|
)[0]
|
||||||
return convert_to_bool(builder, val)
|
return convert_to_bool(builder, val)
|
||||||
if isinstance(cond, ast.Constant):
|
if isinstance(cond, ast.Constant):
|
||||||
if isinstance(cond.value, bool) or isinstance(cond.value, int):
|
if isinstance(cond.value, bool) or isinstance(cond.value, int):
|
||||||
@ -321,7 +325,9 @@ def handle_if(
|
|||||||
else:
|
else:
|
||||||
else_block = None
|
else_block = None
|
||||||
|
|
||||||
cond = handle_cond(func, module, builder, stmt.test, local_sym_tab, map_sym_tab)
|
cond = handle_cond(
|
||||||
|
func, module, builder, stmt.test, local_sym_tab, map_sym_tab, structs_sym_tab
|
||||||
|
)
|
||||||
if else_block:
|
if else_block:
|
||||||
builder.cbranch(cond, then_block, else_block)
|
builder.cbranch(cond, then_block, else_block)
|
||||||
else:
|
else:
|
||||||
|
|||||||
29
tests/failing_tests/conditionals/struct_ptr.py
Normal file
29
tests/failing_tests/conditionals/struct_ptr.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
from pythonbpf import bpf, struct, section, bpfglobal, compile
|
||||||
|
from ctypes import c_void_p, c_int64, c_uint64
|
||||||
|
|
||||||
|
|
||||||
|
@bpf
|
||||||
|
@struct
|
||||||
|
class data_t:
|
||||||
|
pid: c_uint64
|
||||||
|
ts: c_uint64
|
||||||
|
|
||||||
|
|
||||||
|
@bpf
|
||||||
|
@section("tracepoint/syscalls/sys_enter_execve")
|
||||||
|
def hello_world(ctx: c_void_p) -> c_int64:
|
||||||
|
dat = data_t()
|
||||||
|
if dat:
|
||||||
|
print("Hello, World!")
|
||||||
|
else:
|
||||||
|
print("Goodbye, World!")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@bpf
|
||||||
|
@bpfglobal
|
||||||
|
def LICENSE() -> str:
|
||||||
|
return "GPL"
|
||||||
|
|
||||||
|
|
||||||
|
compile()
|
||||||
23
tests/failing_tests/conditionals/type_mismatch.py
Normal file
23
tests/failing_tests/conditionals/type_mismatch.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
from pythonbpf import bpf, section, bpfglobal, compile
|
||||||
|
from ctypes import c_void_p, c_int64, c_int32
|
||||||
|
|
||||||
|
|
||||||
|
@bpf
|
||||||
|
@section("tracepoint/syscalls/sys_enter_execve")
|
||||||
|
def hello_world(ctx: c_void_p) -> c_int64:
|
||||||
|
x = 0
|
||||||
|
y = c_int32(0)
|
||||||
|
if x == y:
|
||||||
|
print("Hello, World!")
|
||||||
|
else:
|
||||||
|
print("Goodbye, World!")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@bpf
|
||||||
|
@bpfglobal
|
||||||
|
def LICENSE() -> str:
|
||||||
|
return "GPL"
|
||||||
|
|
||||||
|
|
||||||
|
compile()
|
||||||
@ -13,7 +13,7 @@ class data_t:
|
|||||||
@section("tracepoint/syscalls/sys_enter_execve")
|
@section("tracepoint/syscalls/sys_enter_execve")
|
||||||
def hello_world(ctx: c_void_p) -> c_int64:
|
def hello_world(ctx: c_void_p) -> c_int64:
|
||||||
dat = data_t()
|
dat = data_t()
|
||||||
if dat.pid:
|
if dat.ts:
|
||||||
print("Hello, World!")
|
print("Hello, World!")
|
||||||
else:
|
else:
|
||||||
print("Goodbye, World!")
|
print("Goodbye, World!")
|
||||||
Reference in New Issue
Block a user