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.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
@bpf
@map
def events() -> PerfEventArray:
return PerfEventArray(key_type=c_uint64, value_type=c_uint64)
@bpf
@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]
})
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
type_ptr = module.add_debug_info("DIDerivedType", {
"tag": dc.DW_TAG_pointer_type,
@ -103,12 +94,6 @@ def create_map_debug_info(module, map_global, map_name, map_params):
"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", {
"tag": dc.DW_TAG_pointer_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
})
elements_arr = []
# Create struct members
# scope field does not appear for some reason
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,
"offset": 0
})
elements_arr.append(type_member)
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
})
if "max_entries" in map_params:
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]
})
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", {
"tag": dc.DW_TAG_member,
@ -149,6 +152,7 @@ def create_map_debug_info(module, map_global, map_name, map_params):
"size": 64,
"offset": 128
})
elements_arr.append(key_member)
value_member = module.add_debug_info("DIDerivedType", {
"tag": dc.DW_TAG_member,
@ -158,13 +162,14 @@ def create_map_debug_info(module, map_global, map_name, map_params):
"size": 64,
"offset": 192
})
elements_arr.append(value_member)
# Create the struct type
struct_type = module.add_debug_info("DICompositeType", {
"tag": dc.DW_TAG_structure_type,
"file": file_metadata,
"size": 256, # 4 * 64-bit pointers
"elements": [type_member, max_entries_member, key_member, value_member]
"size": 64 * len(elements_arr), # 4 * 64-bit pointers
"elements": elements_arr,
}, is_distinct=True)
# Create global variable debug info