Fixed an oddity in the Objective-C class descriptors

where the descriptor took a pointer to an object and
expected the Initialize function to dereference that
pointer and extract the isa value.  This caused one
of our tests to fail.

llvm-svn: 164353
This commit is contained in:
Sean Callanan 2012-09-21 02:09:51 +00:00
parent 4b1b8b3e1d
commit 3e633a290e
1 changed files with 15 additions and 15 deletions

View File

@ -973,13 +973,19 @@ private:
class ClassDescriptorV2 : public ObjCLanguageRuntime::ClassDescriptor
{
public:
ClassDescriptorV2 (ValueObject &isa_pointer)
ClassDescriptorV2 (ValueObject &ptr_to_object)
{
ObjCLanguageRuntime::ObjCISA ptr_value = isa_pointer.GetValueAsUnsigned(0);
lldb::addr_t object_la = ptr_to_object.GetValueAsUnsigned(0);
lldb::ProcessSP process_sp = ptr_to_object.GetProcessSP();
lldb::ProcessSP process_sp = isa_pointer.GetProcessSP();
Error error;
ObjCLanguageRuntime::ObjCISA isa = process_sp->ReadPointerFromMemory(object_la,
error);
Initialize (ptr_value,process_sp);
if (isa == LLDB_INVALID_ADDRESS)
m_valid = false;
else
Initialize (isa, process_sp);
}
ClassDescriptorV2 (ObjCLanguageRuntime::ObjCISA isa, lldb::ProcessSP process_sp)
@ -1116,27 +1122,21 @@ protected:
}
void
Initialize (ObjCLanguageRuntime::ObjCISA pointer_to_isa, lldb::ProcessSP process_sp)
Initialize (ObjCLanguageRuntime::ObjCISA objc_class_la, lldb::ProcessSP process_sp)
{
m_valid = true;
if (!pointer_to_isa || !process_sp)
if (!objc_class_la || !process_sp)
{
m_valid = false;
return;
}
m_objc_class_la = objc_class_la;
size_t ptr_size = process_sp->GetAddressByteSize();
Error error;
m_objc_class_la = process_sp->ReadPointerFromMemory(pointer_to_isa, error);
if (error.Fail())
{
m_valid = false;
return;
}
const bool allow_NULLs = false;
const bool allow_tagged = false;
const bool check_version_specific = true;