Make max_entries optional in map BTF, add PerfEventArray to execve5

This commit is contained in:
Pragyansh Chaturvedi
2025-09-20 03:15:09 +05:30
parent b8fdc16b4f
commit 73862f0084
2 changed files with 35 additions and 26 deletions

View File

@ -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")

View File

@ -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