@@ -72,20 +72,23 @@ def _handle_attribute_expr(
7272 if var_name in local_sym_tab :
7373 var_ptr , var_type , var_metadata = local_sym_tab [var_name ]
7474 logger .info (f"Loading attribute { attr_name } from variable { var_name } " )
75- logger .info (f"Variable type: { var_type } , Variable ptr: { var_ptr } " )
75+ logger .info (f"Variable type: { var_type } , Variable ptr: { var_ptr } , Variable Metadata: { var_metadata } " )
76+ if hasattr (var_metadata , "__module__" ) and var_metadata .__module__ == "vmlinux" :
77+ # Try vmlinux handler when var_metadata is not a string, but has a module attribute.
78+ # This has been done to keep everything separate in vmlinux struct handling.
79+ vmlinux_result = VmlinuxHandlerRegistry .handle_attribute (
80+ expr , local_sym_tab , None , builder
81+ )
82+ if vmlinux_result is not None :
83+ return vmlinux_result
84+ else :
85+ raise RuntimeError ("Vmlinux struct did not process successfully" )
7686 metadata = structs_sym_tab [var_metadata ]
7787 if attr_name in metadata .fields :
7888 gep = metadata .gep (builder , var_ptr , attr_name )
7989 val = builder .load (gep )
8090 field_type = metadata .field_type (attr_name )
8191 return val , field_type
82-
83- # Try vmlinux handler as fallback
84- vmlinux_result = VmlinuxHandlerRegistry .handle_attribute (
85- expr , local_sym_tab , None , builder
86- )
87- if vmlinux_result is not None :
88- return vmlinux_result
8992 return None
9093
9194
0 commit comments