diff options
Diffstat (limited to 'lldb/source/Symbol/SymbolContext.cpp')
-rw-r--r-- | lldb/source/Symbol/SymbolContext.cpp | 153 |
1 files changed, 77 insertions, 76 deletions
diff --git a/lldb/source/Symbol/SymbolContext.cpp b/lldb/source/Symbol/SymbolContext.cpp index 5647f5b5d9e..31e0c89eed9 100644 --- a/lldb/source/Symbol/SymbolContext.cpp +++ b/lldb/source/Symbol/SymbolContext.cpp @@ -759,9 +759,8 @@ bool SymbolContext::GetAddressRangeFromHereToEndLine(uint32_t end_line, } Block *func_block = GetFunctionBlock(); - if (func_block && - func_block->GetRangeIndexContainingAddress( - end_entry.range.GetBaseAddress()) == UINT32_MAX) { + if (func_block && func_block->GetRangeIndexContainingAddress( + end_entry.range.GetBaseAddress()) == UINT32_MAX) { error.SetErrorStringWithFormat( "end line number %d is not contained within the current function.", end_line); @@ -774,8 +773,8 @@ bool SymbolContext::GetAddressRangeFromHereToEndLine(uint32_t end_line, return true; } -const Symbol * -SymbolContext::FindBestGlobalDataSymbol(ConstString name, Status &error) { +const Symbol *SymbolContext::FindBestGlobalDataSymbol(ConstString name, + Status &error) { error.Clear(); if (!target_sp) { @@ -785,8 +784,9 @@ SymbolContext::FindBestGlobalDataSymbol(ConstString name, Status &error) { Target &target = *target_sp; Module *module = module_sp.get(); - auto ProcessMatches = [this, &name, &target, module] - (SymbolContextList &sc_list, Status &error) -> const Symbol* { + auto ProcessMatches = [this, &name, &target, + module](SymbolContextList &sc_list, + Status &error) -> const Symbol * { llvm::SmallVector<const Symbol *, 1> external_symbols; llvm::SmallVector<const Symbol *, 1> internal_symbols; const uint32_t matches = sc_list.GetSize(); @@ -799,77 +799,77 @@ SymbolContext::FindBestGlobalDataSymbol(ConstString name, Status &error) { if (sym_address.IsValid()) { switch (symbol->GetType()) { - case eSymbolTypeData: - case eSymbolTypeRuntime: - case eSymbolTypeAbsolute: - case eSymbolTypeObjCClass: - case eSymbolTypeObjCMetaClass: - case eSymbolTypeObjCIVar: - if (symbol->GetDemangledNameIsSynthesized()) { - // If the demangled name was synthesized, then don't use it for - // expressions. Only let the symbol match if the mangled named - // matches for these symbols. - if (symbol->GetMangled().GetMangledName() != name) - break; - } - if (symbol->IsExternal()) { - external_symbols.push_back(symbol); - } else { - internal_symbols.push_back(symbol); - } - break; - case eSymbolTypeReExported: { - ConstString reexport_name = symbol->GetReExportedSymbolName(); - if (reexport_name) { - ModuleSP reexport_module_sp; - ModuleSpec reexport_module_spec; - reexport_module_spec.GetPlatformFileSpec() = - symbol->GetReExportedSymbolSharedLibrary(); - if (reexport_module_spec.GetPlatformFileSpec()) { - reexport_module_sp = - target.GetImages().FindFirstModule(reexport_module_spec); - if (!reexport_module_sp) { - reexport_module_spec.GetPlatformFileSpec() - .GetDirectory() - .Clear(); - reexport_module_sp = + case eSymbolTypeData: + case eSymbolTypeRuntime: + case eSymbolTypeAbsolute: + case eSymbolTypeObjCClass: + case eSymbolTypeObjCMetaClass: + case eSymbolTypeObjCIVar: + if (symbol->GetDemangledNameIsSynthesized()) { + // If the demangled name was synthesized, then don't use it for + // expressions. Only let the symbol match if the mangled named + // matches for these symbols. + if (symbol->GetMangled().GetMangledName() != name) + break; + } + if (symbol->IsExternal()) { + external_symbols.push_back(symbol); + } else { + internal_symbols.push_back(symbol); + } + break; + case eSymbolTypeReExported: { + ConstString reexport_name = symbol->GetReExportedSymbolName(); + if (reexport_name) { + ModuleSP reexport_module_sp; + ModuleSpec reexport_module_spec; + reexport_module_spec.GetPlatformFileSpec() = + symbol->GetReExportedSymbolSharedLibrary(); + if (reexport_module_spec.GetPlatformFileSpec()) { + reexport_module_sp = target.GetImages().FindFirstModule(reexport_module_spec); - } + if (!reexport_module_sp) { + reexport_module_spec.GetPlatformFileSpec() + .GetDirectory() + .Clear(); + reexport_module_sp = + target.GetImages().FindFirstModule(reexport_module_spec); } - // Don't allow us to try and resolve a re-exported symbol if it - // is the same as the current symbol - if (name == symbol->GetReExportedSymbolName() && - module == reexport_module_sp.get()) - return nullptr; - - return FindBestGlobalDataSymbol( - symbol->GetReExportedSymbolName(), error); } - } break; - - case eSymbolTypeCode: // We already lookup functions elsewhere - case eSymbolTypeVariable: - case eSymbolTypeLocal: - case eSymbolTypeParam: - case eSymbolTypeTrampoline: - case eSymbolTypeInvalid: - case eSymbolTypeException: - case eSymbolTypeSourceFile: - case eSymbolTypeHeaderFile: - case eSymbolTypeObjectFile: - case eSymbolTypeCommonBlock: - case eSymbolTypeBlock: - case eSymbolTypeVariableType: - case eSymbolTypeLineEntry: - case eSymbolTypeLineHeader: - case eSymbolTypeScopeBegin: - case eSymbolTypeScopeEnd: - case eSymbolTypeAdditional: - case eSymbolTypeCompiler: - case eSymbolTypeInstrumentation: - case eSymbolTypeUndefined: - case eSymbolTypeResolver: - break; + // Don't allow us to try and resolve a re-exported symbol if it + // is the same as the current symbol + if (name == symbol->GetReExportedSymbolName() && + module == reexport_module_sp.get()) + return nullptr; + + return FindBestGlobalDataSymbol(symbol->GetReExportedSymbolName(), + error); + } + } break; + + case eSymbolTypeCode: // We already lookup functions elsewhere + case eSymbolTypeVariable: + case eSymbolTypeLocal: + case eSymbolTypeParam: + case eSymbolTypeTrampoline: + case eSymbolTypeInvalid: + case eSymbolTypeException: + case eSymbolTypeSourceFile: + case eSymbolTypeHeaderFile: + case eSymbolTypeObjectFile: + case eSymbolTypeCommonBlock: + case eSymbolTypeBlock: + case eSymbolTypeVariableType: + case eSymbolTypeLineEntry: + case eSymbolTypeLineHeader: + case eSymbolTypeScopeBegin: + case eSymbolTypeScopeEnd: + case eSymbolTypeAdditional: + case eSymbolTypeCompiler: + case eSymbolTypeInstrumentation: + case eSymbolTypeUndefined: + case eSymbolTypeResolver: + break; } } } @@ -930,7 +930,6 @@ SymbolContext::FindBestGlobalDataSymbol(ConstString name, Status &error) { return nullptr; // no error; we just didn't find anything } - // // SymbolContextSpecifier // @@ -1293,6 +1292,8 @@ bool SymbolContextList::RemoveContextAtIndex(size_t idx) { uint32_t SymbolContextList::GetSize() const { return m_symbol_contexts.size(); } +bool SymbolContextList::IsEmpty() const { return m_symbol_contexts.empty(); } + uint32_t SymbolContextList::NumLineEntriesWithLine(uint32_t line) const { uint32_t match_count = 0; const size_t size = m_symbol_contexts.size(); |