summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile
diff options
context:
space:
mode:
authorAleksandr Urakov <aleksandr.urakov@jetbrains.com>2018-08-29 07:26:11 +0000
committerAleksandr Urakov <aleksandr.urakov@jetbrains.com>2018-08-29 07:26:11 +0000
commit398f81b3b43108fab601d9e30b2c01b2420945bf (patch)
tree5c78155f97a41383d92cbc1aad7290978482e4cb /lldb/source/Plugins/SymbolFile
parente0f3e9283f8249ad5253fbec10f68f3c81ae8b34 (diff)
downloadbcm5719-llvm-398f81b3b43108fab601d9e30b2c01b2420945bf.tar.gz
bcm5719-llvm-398f81b3b43108fab601d9e30b2c01b2420945bf.zip
[PDB] Resolve a symbol context block info correctly
Summary: This patch allows to resolve a symbol context block info even if a function info was not requested. Also it adds the correct resolving of nested blocks (the previous implementation used function blocks instead of them). Reviewers: zturner, asmith, labath Reviewed By: asmith Subscribers: lldb-commits, stella.stamenova Tags: #lldb Differential Revision: https://reviews.llvm.org/D51104 llvm-svn: 340901
Diffstat (limited to 'lldb/source/Plugins/SymbolFile')
-rw-r--r--lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
index d5b88171a01..f52aa982308 100644
--- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
@@ -629,7 +629,8 @@ SymbolFilePDB::ResolveSymbolContext(const lldb_private::Address &so_addr,
lldbassert(sc.module_sp == cu_sp->GetModule());
}
- if (resolve_scope & eSymbolContextFunction) {
+ if (resolve_scope & eSymbolContextFunction ||
+ resolve_scope & eSymbolContextBlock) {
addr_t file_vm_addr = so_addr.GetFileAddress();
auto symbol_up =
m_session_up->findSymbolByAddress(file_vm_addr, PDB_SymType::Function);
@@ -643,8 +644,11 @@ SymbolFilePDB::ResolveSymbolContext(const lldb_private::Address &so_addr,
if (sc.function) {
resolved_flags |= eSymbolContextFunction;
if (resolve_scope & eSymbolContextBlock) {
- Block &block = sc.function->GetBlock(true);
- sc.block = block.FindBlockByID(sc.function->GetID());
+ auto block_symbol = m_session_up->findSymbolByAddress(
+ file_vm_addr, PDB_SymType::Block);
+ auto block_id = block_symbol ? block_symbol->getSymIndexId()
+ : sc.function->GetID();
+ sc.block = sc.function->GetBlock(true).FindBlockByID(block_id);
if (sc.block)
resolved_flags |= eSymbolContextBlock;
}
OpenPOWER on IntegriCloud