mirror of
https://github.com/varun-r-mallya/Python-BPF.git
synced 2025-12-31 21:06:25 +00:00
Make max_entries optional in map BTF, add PerfEventArray to execve5
This commit is contained in:
@ -1,9 +1,13 @@
|
|||||||
from pythonbpf import bpf, map, section, bpfglobal, compile
|
from pythonbpf import bpf, map, section, bpfglobal, compile
|
||||||
from pythonbpf.helpers import ktime, pid
|
from pythonbpf.helpers import ktime, pid
|
||||||
from pythonbpf.maps import HashMap
|
from pythonbpf.maps import PerfEventArray
|
||||||
|
|
||||||
from ctypes import c_void_p, c_int64, c_int32, c_uint64
|
from ctypes import c_void_p, c_int64, c_int32, c_uint64
|
||||||
|
|
||||||
|
@bpf
|
||||||
|
@map
|
||||||
|
def events() -> PerfEventArray:
|
||||||
|
return PerfEventArray(key_type=c_uint64, value_type=c_uint64)
|
||||||
|
|
||||||
@bpf
|
@bpf
|
||||||
@section("tracepoint/syscalls/sys_enter_clone")
|
@section("tracepoint/syscalls/sys_enter_clone")
|
||||||
|
|||||||
@ -87,15 +87,6 @@ def create_map_debug_info(module, map_global, map_name, map_params):
|
|||||||
"elements": [array_subrange]
|
"elements": [array_subrange]
|
||||||
})
|
})
|
||||||
|
|
||||||
array_subrange_max_entries = module.add_debug_info(
|
|
||||||
"DISubrange", {"count": map_params["max_entries"]})
|
|
||||||
array_type_max_entries = module.add_debug_info("DICompositeType", {
|
|
||||||
"tag": dc.DW_TAG_array_type,
|
|
||||||
"baseType": uint_type,
|
|
||||||
"size": 32,
|
|
||||||
"elements": [array_subrange_max_entries]
|
|
||||||
})
|
|
||||||
|
|
||||||
# Create pointer types
|
# Create pointer types
|
||||||
type_ptr = module.add_debug_info("DIDerivedType", {
|
type_ptr = module.add_debug_info("DIDerivedType", {
|
||||||
"tag": dc.DW_TAG_pointer_type,
|
"tag": dc.DW_TAG_pointer_type,
|
||||||
@ -103,12 +94,6 @@ def create_map_debug_info(module, map_global, map_name, map_params):
|
|||||||
"size": 64
|
"size": 64
|
||||||
})
|
})
|
||||||
|
|
||||||
max_entries_ptr = module.add_debug_info("DIDerivedType", {
|
|
||||||
"tag": dc.DW_TAG_pointer_type,
|
|
||||||
"baseType": array_type_max_entries,
|
|
||||||
"size": 64
|
|
||||||
})
|
|
||||||
|
|
||||||
key_ptr = module.add_debug_info("DIDerivedType", {
|
key_ptr = module.add_debug_info("DIDerivedType", {
|
||||||
"tag": dc.DW_TAG_pointer_type,
|
"tag": dc.DW_TAG_pointer_type,
|
||||||
"baseType": uint_type, # Adjust based on actual key type
|
"baseType": uint_type, # Adjust based on actual key type
|
||||||
@ -121,6 +106,8 @@ def create_map_debug_info(module, map_global, map_name, map_params):
|
|||||||
"size": 64
|
"size": 64
|
||||||
})
|
})
|
||||||
|
|
||||||
|
elements_arr = []
|
||||||
|
|
||||||
# Create struct members
|
# Create struct members
|
||||||
# scope field does not appear for some reason
|
# scope field does not appear for some reason
|
||||||
type_member = module.add_debug_info("DIDerivedType", {
|
type_member = module.add_debug_info("DIDerivedType", {
|
||||||
@ -131,15 +118,31 @@ def create_map_debug_info(module, map_global, map_name, map_params):
|
|||||||
"size": 64,
|
"size": 64,
|
||||||
"offset": 0
|
"offset": 0
|
||||||
})
|
})
|
||||||
|
elements_arr.append(type_member)
|
||||||
|
|
||||||
max_entries_member = module.add_debug_info("DIDerivedType", {
|
if "max_entries" in map_params:
|
||||||
"tag": dc.DW_TAG_member,
|
array_subrange_max_entries = module.add_debug_info(
|
||||||
"name": "max_entries",
|
"DISubrange", {"count": map_params["max_entries"]})
|
||||||
"file": file_metadata,
|
array_type_max_entries = module.add_debug_info("DICompositeType", {
|
||||||
"baseType": max_entries_ptr,
|
"tag": dc.DW_TAG_array_type,
|
||||||
"size": 64,
|
"baseType": uint_type,
|
||||||
"offset": 64
|
"size": 32,
|
||||||
})
|
"elements": [array_subrange_max_entries]
|
||||||
|
})
|
||||||
|
max_entries_ptr = module.add_debug_info("DIDerivedType", {
|
||||||
|
"tag": dc.DW_TAG_pointer_type,
|
||||||
|
"baseType": array_type_max_entries,
|
||||||
|
"size": 64
|
||||||
|
})
|
||||||
|
max_entries_member = module.add_debug_info("DIDerivedType", {
|
||||||
|
"tag": dc.DW_TAG_member,
|
||||||
|
"name": "max_entries",
|
||||||
|
"file": file_metadata,
|
||||||
|
"baseType": max_entries_ptr,
|
||||||
|
"size": 64,
|
||||||
|
"offset": 64
|
||||||
|
})
|
||||||
|
elements_arr.append(max_entries_member)
|
||||||
|
|
||||||
key_member = module.add_debug_info("DIDerivedType", {
|
key_member = module.add_debug_info("DIDerivedType", {
|
||||||
"tag": dc.DW_TAG_member,
|
"tag": dc.DW_TAG_member,
|
||||||
@ -149,6 +152,7 @@ def create_map_debug_info(module, map_global, map_name, map_params):
|
|||||||
"size": 64,
|
"size": 64,
|
||||||
"offset": 128
|
"offset": 128
|
||||||
})
|
})
|
||||||
|
elements_arr.append(key_member)
|
||||||
|
|
||||||
value_member = module.add_debug_info("DIDerivedType", {
|
value_member = module.add_debug_info("DIDerivedType", {
|
||||||
"tag": dc.DW_TAG_member,
|
"tag": dc.DW_TAG_member,
|
||||||
@ -158,13 +162,14 @@ def create_map_debug_info(module, map_global, map_name, map_params):
|
|||||||
"size": 64,
|
"size": 64,
|
||||||
"offset": 192
|
"offset": 192
|
||||||
})
|
})
|
||||||
|
elements_arr.append(value_member)
|
||||||
|
|
||||||
# Create the struct type
|
# Create the struct type
|
||||||
struct_type = module.add_debug_info("DICompositeType", {
|
struct_type = module.add_debug_info("DICompositeType", {
|
||||||
"tag": dc.DW_TAG_structure_type,
|
"tag": dc.DW_TAG_structure_type,
|
||||||
"file": file_metadata,
|
"file": file_metadata,
|
||||||
"size": 256, # 4 * 64-bit pointers
|
"size": 64 * len(elements_arr), # 4 * 64-bit pointers
|
||||||
"elements": [type_member, max_entries_member, key_member, value_member]
|
"elements": elements_arr,
|
||||||
}, is_distinct=True)
|
}, is_distinct=True)
|
||||||
|
|
||||||
# Create global variable debug info
|
# Create global variable debug info
|
||||||
|
|||||||
Reference in New Issue
Block a user