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
 | 
					        virtual uint64_t
 | 
				
			||||||
        GetInstanceSize () = 0;
 | 
					        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
 | 
					        // use to implement version-specific additional constraints on pointers
 | 
				
			||||||
        virtual bool
 | 
					        virtual bool
 | 
				
			||||||
        CheckPointer (lldb::addr_t value,
 | 
					        CheckPointer (lldb::addr_t value,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1029,6 +1029,12 @@ public:
 | 
				
			||||||
        return m_isa;
 | 
					        return m_isa;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    virtual bool
 | 
				
			||||||
 | 
					    IsRealized ()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return m_realized;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    virtual
 | 
					    virtual
 | 
				
			||||||
    ~ClassDescriptorV2 ()
 | 
					    ~ClassDescriptorV2 ()
 | 
				
			||||||
    {}
 | 
					    {}
 | 
				
			||||||
| 
						 | 
					@ -1107,9 +1113,28 @@ protected:
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        lldb::addr_t rot_pointer;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        // now construct the data object
 | 
					        // 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())
 | 
					        if (error.Fail())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
| 
						 | 
					@ -1154,12 +1179,14 @@ protected:
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
 | 
					    static const uint32_t RW_REALIZED = (1 << 31);
 | 
				
			||||||
    ConstString m_name;
 | 
					    ConstString m_name;
 | 
				
			||||||
    ObjCLanguageRuntime::ObjCISA m_isa;
 | 
					    ObjCLanguageRuntime::ObjCISA m_isa;
 | 
				
			||||||
    ObjCLanguageRuntime::ObjCISA m_parent_isa;
 | 
					    ObjCLanguageRuntime::ObjCISA m_parent_isa;
 | 
				
			||||||
    bool m_valid;
 | 
					    bool m_valid;
 | 
				
			||||||
    lldb::ProcessWP m_process_wp;
 | 
					    lldb::ProcessWP m_process_wp;
 | 
				
			||||||
    uint64_t m_instance_size;
 | 
					    uint64_t m_instance_size;
 | 
				
			||||||
 | 
					    bool m_realized;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ClassDescriptorV2Tagged : public ObjCLanguageRuntime::ClassDescriptor
 | 
					class ClassDescriptorV2Tagged : public ObjCLanguageRuntime::ClassDescriptor
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue