@@ -97,18 +97,24 @@ def handle_vmlinux_struct_field(
9797 globvar_ir , field_data = self .get_field_type (
9898 python_type .__name__ , field_name
9999 )
100- # field_index = self.get_field_index(python_type.__name__, field_name)
100+
101+ # Load the offset value
101102 offset = builder .load (globvar_ir )
103+
104+ # Convert pointer to integer
105+ i64_type = ir .IntType (64 )
106+ ptr_as_int = builder .ptrtoint (var_info .var , i64_type )
107+
108+ # Add the offset
109+ field_addr = builder .add (ptr_as_int , offset )
110+
111+ # Convert back to pointer
102112 i8_ptr_type = ir .IntType (8 ).as_pointer ()
103- byte_ptr = builder .bitcast (var_info .var , i8_ptr_type )
104- print (byte_ptr )
105- # Step 3: GEP with the offset to get field pointer
106- field_ptr_i8 = builder .gep (
107- byte_ptr , [ir .Constant (ir .IntType (32 ), 0 ), offset ], inbounds = False
108- )
109- print (field_ptr_i8 )
113+ field_ptr_i8 = builder .inttoptr (field_addr , i8_ptr_type )
114+ logger .info (f"field_ptr_i8: { field_ptr_i8 } " )
115+
110116 # Return pointer to field and field type
111- return None
117+ return field_ptr_i8 , field_data
112118 else :
113119 raise RuntimeError ("Variable accessed not found in symbol table" )
114120
0 commit comments