mirror of
https://github.com/varun-r-mallya/Python-BPF.git
synced 2025-12-31 21:06:25 +00:00
add scope field separately to subroutine type remove circular dependency
This commit is contained in:
@ -200,4 +200,37 @@ class DebugInfoGenerator:
|
||||
type_array.append(param_types)
|
||||
return self.module.add_debug_info("DISubroutineType", {"types": type_array})
|
||||
|
||||
def create_local_variable_debug_info(
|
||||
self, name: str, arg: int, var_type: Any
|
||||
) -> Any:
|
||||
"""
|
||||
Create debug info for a local variable (DILocalVariable) without scope.
|
||||
Example:
|
||||
!DILocalVariable(name: "ctx", arg: 1, file: !3, line: 20, type: !7)
|
||||
"""
|
||||
return self.module.add_debug_info(
|
||||
"DILocalVariable",
|
||||
{
|
||||
"name": name,
|
||||
"arg": arg,
|
||||
"file": self.module._file_metadata,
|
||||
"type": var_type,
|
||||
},
|
||||
)
|
||||
|
||||
def add_scope_to_local_variable(self, local_variable_debug_info, scope_value):
|
||||
"""
|
||||
Add scope information to an existing local variable debug info object.
|
||||
"""
|
||||
#TODO: this is a workaround a flaw in the debug info generation. Fix this if possible in the future.
|
||||
# We should not be touching llvmlite's internals like this.
|
||||
if hasattr(local_variable_debug_info, 'operands'):
|
||||
# LLVM metadata operands is a tuple, so we need to rebuild it
|
||||
existing_operands = local_variable_debug_info.operands
|
||||
|
||||
# Convert tuple to list, add scope, convert back to tuple
|
||||
operands_list = list(existing_operands)
|
||||
operands_list.append(('scope', scope_value))
|
||||
|
||||
# Reassign the new tuple
|
||||
local_variable_debug_info.operands = tuple(operands_list)
|
||||
@ -49,8 +49,18 @@ def generate_function_debug_info(
|
||||
"The first argument should always be a pointer to a struct or a void pointer"
|
||||
)
|
||||
context_debug_info = VmlinuxHandlerRegistry.get_struct_debug_info(annotation.id)
|
||||
pointer_to_context_debug_info = generator.create_pointer_type(context_debug_info, 64)
|
||||
subroutine_type = generator.create_subroutine_type(return_type, pointer_to_context_debug_info)
|
||||
print(subroutine_type)
|
||||
pointer_to_context_debug_info = generator.create_pointer_type(
|
||||
context_debug_info, 64
|
||||
)
|
||||
subroutine_type = generator.create_subroutine_type(
|
||||
return_type, pointer_to_context_debug_info
|
||||
)
|
||||
context_local_variable = generator.create_local_variable_debug_info(
|
||||
leading_argument_name, 1, pointer_to_context_debug_info
|
||||
)
|
||||
|
||||
# following is just a test.
|
||||
generator.add_scope_to_local_variable(context_local_variable, module._file_metadata)
|
||||
print(context_local_variable)
|
||||
else:
|
||||
logger.error(f"Invalid annotation type for argument '{leading_argument_name}'")
|
||||
|
||||
Reference in New Issue
Block a user