public GenericClassInfo GetGenericClass(TargetMemoryAccess memory,
TargetAddress address)
{
int addr_size = memory.TargetMemoryInfo.TargetAddressSize;
TargetReader reader = new TargetReader (memory.ReadMemory (address, 5 * addr_size));
TargetAddress container = reader.ReadAddress ();
TargetAddress class_inst = reader.ReadAddress ();
reader.ReadAddress (); /* method_inst */
reader.ReadAddress ();
TargetAddress cached_class = reader.ReadAddress ();
int inst_id = memory.ReadInteger (class_inst);
int inst_data = memory.ReadInteger (class_inst + 4);
TargetAddress inst_argv;
if (MonoDebuggerInfo.MajorVersion == 80)
inst_argv = memory.ReadAddress (class_inst + 8);
else
inst_argv = class_inst + 8;
int type_argc = inst_data & 0x3fffff;
TargetReader argv_reader = new TargetReader (
memory.ReadMemory (inst_argv, type_argc * addr_size));
TargetAddress[] type_args = new TargetAddress [type_argc];
for (int i = 0; i < type_argc; i++)
type_args [i] = argv_reader.ReadAddress ();
TargetAddress cached_class_ptr = address + 4 * addr_size;
return new GenericClassInfo (container, type_args, cached_class_ptr,
cached_class);
}