Make the Class Descriptors able to fetch the class name for unrealized classes
llvm-svn: 164050
This commit is contained in:
parent
9b44493304
commit
ee23ae264b
|
|
@ -95,6 +95,13 @@ public:
|
|||
virtual uint64_t
|
||||
GetInstanceSize () = 0;
|
||||
|
||||
virtual bool
|
||||
IsRealized ()
|
||||
{
|
||||
// anything other than some instances of v2 classes are always realized
|
||||
return true;
|
||||
}
|
||||
|
||||
// use to implement version-specific additional constraints on pointers
|
||||
virtual bool
|
||||
CheckPointer (lldb::addr_t value,
|
||||
|
|
|
|||
|
|
@ -1029,6 +1029,12 @@ public:
|
|||
return m_isa;
|
||||
}
|
||||
|
||||
virtual bool
|
||||
IsRealized ()
|
||||
{
|
||||
return m_realized;
|
||||
}
|
||||
|
||||
virtual
|
||||
~ClassDescriptorV2 ()
|
||||
{}
|
||||
|
|
@ -1107,9 +1113,28 @@ protected:
|
|||
return;
|
||||
}
|
||||
|
||||
lldb::addr_t rot_pointer;
|
||||
|
||||
// now construct the data object
|
||||
|
||||
lldb::addr_t rot_pointer = process_sp->ReadPointerFromMemory(data_ptr + 8, error);
|
||||
uint32_t flags;
|
||||
process_sp->ReadMemory(data_ptr, &flags, 4, error);
|
||||
if (error.Fail())
|
||||
{
|
||||
m_valid = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags & RW_REALIZED)
|
||||
{
|
||||
m_realized = true;
|
||||
rot_pointer = process_sp->ReadPointerFromMemory(data_ptr + 8, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_realized = false;
|
||||
rot_pointer = data_ptr;
|
||||
}
|
||||
|
||||
if (error.Fail())
|
||||
{
|
||||
|
|
@ -1154,12 +1179,14 @@ protected:
|
|||
}
|
||||
|
||||
private:
|
||||
static const uint32_t RW_REALIZED = (1 << 31);
|
||||
ConstString m_name;
|
||||
ObjCLanguageRuntime::ObjCISA m_isa;
|
||||
ObjCLanguageRuntime::ObjCISA m_parent_isa;
|
||||
bool m_valid;
|
||||
lldb::ProcessWP m_process_wp;
|
||||
uint64_t m_instance_size;
|
||||
bool m_realized;
|
||||
};
|
||||
|
||||
class ClassDescriptorV2Tagged : public ObjCLanguageRuntime::ClassDescriptor
|
||||
|
|
|
|||
Loading…
Reference in New Issue