@@ -62,23 +62,41 @@ def process_vmlinux_post_ast(
6262 class_obj = getattr (imported_module , current_symbol_name )
6363 # Inspect the class fields
6464 if hasattr (class_obj , "_fields_" ):
65- for field_name , field_type in class_obj ._fields_ :
66- field_table [field_name ] = field_type
65+ for field_elem in class_obj ._fields_ :
66+ field_name = None
67+ field_type = None
68+ bitfield_size = None
69+ if len (field_elem ) == 2 :
70+ field_name , field_type = field_elem
71+ elif len (field_elem ) == 3 :
72+ field_name , field_type , bitfield_size = field_elem
73+ field_table [field_name ] = [field_type , bitfield_size ]
6774 elif hasattr (class_obj , "__annotations__" ):
68- for field_name , field_type in class_obj .__annotations__ .items ():
69- field_table [field_name ] = field_type
75+ for field_elem in class_obj .__annotations__ .items ():
76+ field_name = None
77+ field_type = None
78+ bitfield_size = None
79+ if len (field_elem ) == 2 :
80+ field_name , field_type = field_elem
81+ elif len (field_elem ) == 3 :
82+ field_name , field_type , bitfield_size = field_elem
83+ field_table [field_name ] = [field_type , bitfield_size ]
7084 else :
7185 raise TypeError ("Could not get required class and definition" )
7286
73- logger .info (f"Extracted fields for { current_symbol_name } : { field_table } " )
74-
75- for elem_name , elem_type in field_table .items ():
87+ logger .debug (f"Extracted fields for { current_symbol_name } : { field_table } " )
88+ for elem in field_table .items ():
89+ elem_name , elem_temp_list = elem
90+ [elem_type , elem_bitfield_size ] = elem_temp_list
7691 local_module_name = getattr (elem_type , "__module__" , None )
7792 if local_module_name == ctypes .__name__ :
78- new_dep_node .add_field (elem_name , elem_type , ready = True )
93+ new_dep_node .add_field (elem_name , elem_type , ready = False )
94+ new_dep_node .set_field_bitfield_size (elem_name , elem_bitfield_size )
95+ new_dep_node .set_field_ready (elem_name , is_ready = True )
7996 logger .info (f"Field { elem_name } is direct ctypes type: { elem_type } " )
8097 elif local_module_name == "vmlinux" :
8198 new_dep_node .add_field (elem_name , elem_type , ready = False )
99+ new_dep_node .set_field_bitfield_size (elem_name , elem_bitfield_size )
82100 logger .debug (
83101 f"Processing vmlinux field: { elem_name } , type: { elem_type } "
84102 )
0 commit comments