diff options
author | Sean Callanan <scallanan@apple.com> | 2011-12-01 02:04:16 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2011-12-01 02:04:16 +0000 |
commit | 947ccc73965cb1102bcab932f55c56729d02cf03 (patch) | |
tree | 2b442302dd0d8e9b6a5c3e8261676975c35de117 | |
parent | c1870b2633e52a98af1cde1043fc9491902a5f75 (diff) | |
download | bcm5719-llvm-947ccc73965cb1102bcab932f55c56729d02cf03.tar.gz bcm5719-llvm-947ccc73965cb1102bcab932f55c56729d02cf03.zip |
Made symbol lookup in the expression parser more
robust:
- Now a client can specify what kind of symbols
are needed; notably, this allows looking up
Objective-C class symbols specifically.
- In the class of symbols being looked up, if
one is non-NULL and others are NULL, LLDB now
prefers the non-NULL one.
llvm-svn: 145554
-rw-r--r-- | lldb/include/lldb/Expression/ClangExpressionDeclMap.h | 6 | ||||
-rw-r--r-- | lldb/source/Expression/ClangExpressionDeclMap.cpp | 12 | ||||
-rw-r--r-- | lldb/source/Expression/IRForTarget.cpp | 4 |
3 files changed, 12 insertions, 10 deletions
diff --git a/lldb/include/lldb/Expression/ClangExpressionDeclMap.h b/lldb/include/lldb/Expression/ClangExpressionDeclMap.h index 995a21069b1..3e0058db0da 100644 --- a/lldb/include/lldb/Expression/ClangExpressionDeclMap.h +++ b/lldb/include/lldb/Expression/ClangExpressionDeclMap.h @@ -336,10 +336,12 @@ public: //------------------------------------------------------------------ lldb::addr_t GetSymbolAddress (Target &target, - const ConstString &name); + const ConstString &name, + lldb::SymbolType symbol_type); lldb::addr_t - GetSymbolAddress (const ConstString &name); + GetSymbolAddress (const ConstString &name, + lldb::SymbolType symbol_type); //------------------------------------------------------------------ /// [Used by IRInterpreter] Get basic target information. diff --git a/lldb/source/Expression/ClangExpressionDeclMap.cpp b/lldb/source/Expression/ClangExpressionDeclMap.cpp index 6da3e44fe94..88eeba83182 100644 --- a/lldb/source/Expression/ClangExpressionDeclMap.cpp +++ b/lldb/source/Expression/ClangExpressionDeclMap.cpp @@ -718,16 +718,16 @@ ClangExpressionDeclMap::GetFunctionAddress } addr_t -ClangExpressionDeclMap::GetSymbolAddress (Target &target, const ConstString &name) +ClangExpressionDeclMap::GetSymbolAddress (Target &target, const ConstString &name, lldb::SymbolType symbol_type) { SymbolContextList sc_list; - target.GetImages().FindSymbolsWithNameAndType(name, eSymbolTypeAny, sc_list); + target.GetImages().FindSymbolsWithNameAndType(name, symbol_type, sc_list); const uint32_t num_matches = sc_list.GetSize(); addr_t symbol_load_addr = LLDB_INVALID_ADDRESS; - for (uint32_t i=0; i<num_matches && symbol_load_addr == LLDB_INVALID_ADDRESS; i++) + for (uint32_t i=0; i<num_matches && (symbol_load_addr == 0 || symbol_load_addr == LLDB_INVALID_ADDRESS); i++) { SymbolContext sym_ctx; sc_list.GetContextAtIndex(i, sym_ctx); @@ -778,7 +778,7 @@ ClangExpressionDeclMap::GetSymbolAddress (Target &target, const ConstString &nam } addr_t -ClangExpressionDeclMap::GetSymbolAddress (const ConstString &name) +ClangExpressionDeclMap::GetSymbolAddress (const ConstString &name, lldb::SymbolType symbol_type) { assert (m_parser_vars.get()); @@ -786,7 +786,7 @@ ClangExpressionDeclMap::GetSymbolAddress (const ConstString &name) !m_parser_vars->m_exe_ctx->GetTargetPtr()) return false; - return GetSymbolAddress(m_parser_vars->m_exe_ctx->GetTargetRef(), name); + return GetSymbolAddress(m_parser_vars->m_exe_ctx->GetTargetRef(), name, symbol_type); } // Interface for IRInterpreter @@ -1741,7 +1741,7 @@ ClangExpressionDeclMap::DoMaterializeOneVariable } else if (sym) { - addr_t location_load_addr = GetSymbolAddress(*target, name); + addr_t location_load_addr = GetSymbolAddress(*target, name, lldb::eSymbolTypeAny); if (location_load_addr == LLDB_INVALID_ADDRESS) { diff --git a/lldb/source/Expression/IRForTarget.cpp b/lldb/source/Expression/IRForTarget.cpp index cc97706dcf9..02c3135e469 100644 --- a/lldb/source/Expression/IRForTarget.cpp +++ b/lldb/source/Expression/IRForTarget.cpp @@ -1676,7 +1676,7 @@ IRForTarget::HandleSymbol (Value *symbol) lldb_private::ConstString name(symbol->getName().str().c_str()); - lldb::addr_t symbol_addr = m_decl_map->GetSymbolAddress (name); + lldb::addr_t symbol_addr = m_decl_map->GetSymbolAddress (name, lldb::eSymbolTypeAny); if (symbol_addr == LLDB_INVALID_ADDRESS) { @@ -1748,7 +1748,7 @@ IRForTarget::HandleObjCClass(Value *classlist_reference) StringRef name(initializer->getName()); lldb_private::ConstString name_cstr(name.str().c_str()); - lldb::addr_t class_ptr = m_decl_map->GetSymbolAddress(name_cstr); + lldb::addr_t class_ptr = m_decl_map->GetSymbolAddress(name_cstr, lldb::eSymbolTypeRuntime); if (log) log->Printf("Found reference to Objective-C class %s (0x%llx)", name_cstr.AsCString(), (unsigned long long)class_ptr); |