ObjCLanguageRuntime.cpp revision 58513667f6765aa8db13cdc4abd500340c1cac80
1642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===-- CPPLanguageRuntime.cpp -------------------------------------------------*- C++ -*-===// 2642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 3642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// The LLVM Compiler Infrastructure 4642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 5642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// This file is distributed under the University of Illinois Open Source 6642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// License. See LICENSE.TXT for details. 7642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 8642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===----------------------------------------------------------------------===// 9324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham#include "clang/AST/Type.h" 10642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 11b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham#include "lldb/Core/Log.h" 12642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/Core/PluginManager.h" 13324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham#include "lldb/Core/ValueObject.h" 14324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham#include "lldb/Symbol/ClangASTContext.h" 15ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham#include "lldb/Symbol/Type.h" 16b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham#include "lldb/Target/ObjCLanguageRuntime.h" 17642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 18642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamusing namespace lldb; 19642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamusing namespace lldb_private; 20642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 21642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//---------------------------------------------------------------------- 22642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Destructor 23642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//---------------------------------------------------------------------- 24642036f22366d47ea8e6f8498bedb92b88f7f79fJim InghamObjCLanguageRuntime::~ObjCLanguageRuntime() 25642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham{ 26642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham} 27642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 28642036f22366d47ea8e6f8498bedb92b88f7f79fJim InghamObjCLanguageRuntime::ObjCLanguageRuntime (Process *process) : 29642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham LanguageRuntime (process) 30642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham{ 31642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 32b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham} 33b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham 34b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Inghamvoid 35b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim InghamObjCLanguageRuntime::AddToMethodCache (lldb::addr_t class_addr, lldb::addr_t selector, lldb::addr_t impl_addr) 36b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham{ 37e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); 38b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham if (log) 39b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham { 40b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham log->Printf ("Caching: class 0x%llx selector 0x%llx implementation 0x%llx.", class_addr, selector, impl_addr); 41b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham } 42b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham m_impl_cache.insert (std::pair<ClassAndSel,lldb::addr_t> (ClassAndSel(class_addr, selector), impl_addr)); 43b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham} 44b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham 45b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Inghamlldb::addr_t 46b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim InghamObjCLanguageRuntime::LookupInMethodCache (lldb::addr_t class_addr, lldb::addr_t selector) 47b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham{ 48b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham MsgImplMap::iterator pos, end = m_impl_cache.end(); 49b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham pos = m_impl_cache.find (ClassAndSel(class_addr, selector)); 50b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham if (pos != end) 51b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham return (*pos).second; 52b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham return LLDB_INVALID_ADDRESS; 53b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham} 54ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 55ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamvoid 56ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamObjCLanguageRuntime::AddToClassNameCache (lldb::addr_t class_addr, const char *name, lldb::TypeSP type_sp) 57ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 58ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); 59ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (log) 60ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham { 61ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham log->Printf ("Caching: class 0x%llx name: %s.", class_addr, name); 62ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham } 63ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 64ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName class_type_or_name; 65ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 66ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (type_sp != NULL) 67ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham class_type_or_name.SetTypeSP (type_sp); 68ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham else if (name && *name != '\0') 69ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham class_type_or_name.SetName (name); 70ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham else 71ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return; 72ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham m_class_name_cache.insert (std::pair<lldb::addr_t,TypeAndOrName> (class_addr, class_type_or_name)); 73ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 74ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 75ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamvoid 76ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamObjCLanguageRuntime::AddToClassNameCache (lldb::addr_t class_addr, const TypeAndOrName &class_type_or_name) 77ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 78ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); 79ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (log) 80ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham { 81ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham log->Printf ("Caching: class 0x%llx name: %s.", class_addr, class_type_or_name.GetName().AsCString()); 82ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham } 83ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 84ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham m_class_name_cache.insert (std::pair<lldb::addr_t,TypeAndOrName> (class_addr, class_type_or_name)); 85ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 86ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 87ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName 88ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamObjCLanguageRuntime::LookupInClassNameCache (lldb::addr_t class_addr) 89ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 90ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham ClassNameMap::iterator pos, end = m_class_name_cache.end(); 91ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham pos = m_class_name_cache.find (class_addr); 92ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (pos != end) 93ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return (*pos).second; 94ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return TypeAndOrName (); 95ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 9658513667f6765aa8db13cdc4abd500340c1cac80Jim Ingham 9758513667f6765aa8db13cdc4abd500340c1cac80Jim Inghamsize_t 9858513667f6765aa8db13cdc4abd500340c1cac80Jim InghamObjCLanguageRuntime::GetByteOffsetForIvar (ClangASTType &parent_qual_type, const char *ivar_name) 9958513667f6765aa8db13cdc4abd500340c1cac80Jim Ingham{ 10058513667f6765aa8db13cdc4abd500340c1cac80Jim Ingham return LLDB_INVALID_IVAR_OFFSET; 10158513667f6765aa8db13cdc4abd500340c1cac80Jim Ingham} 10258513667f6765aa8db13cdc4abd500340c1cac80Jim Ingham 103