diff options
Diffstat (limited to 'lldb/source/Symbol/Symtab.cpp')
-rw-r--r-- | lldb/source/Symbol/Symtab.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lldb/source/Symbol/Symtab.cpp b/lldb/source/Symbol/Symtab.cpp index b20504addec..31db57289fd 100644 --- a/lldb/source/Symbol/Symtab.cpp +++ b/lldb/source/Symbol/Symtab.cpp @@ -971,9 +971,11 @@ Symtab::InitAddressIndexes() if (end_section_file_addr > symbol_file_addr) { Symbol &symbol = m_symbols[entry.data]; - - symbol.SetByteSize(end_section_file_addr - symbol_file_addr); - symbol.SetSizeIsSynthesized(true); + if (!symbol.GetByteSizeIsValid()) + { + symbol.SetByteSize(end_section_file_addr - symbol_file_addr); + symbol.SetSizeIsSynthesized(true); + } } } } @@ -1039,18 +1041,15 @@ Symtab::FindSymbolContainingFileAddress (addr_t file_addr, const uint32_t* index return info.match_symbol; } - const size_t symbol_byte_size = info.match_symbol->GetByteSize(); - - if (symbol_byte_size == 0) + if (!info.match_symbol->GetByteSizeIsValid()) { - // We weren't able to find the size of the symbol so lets just go - // with that match we found in our search... + // The matched symbol dosn't have a valid byte size so lets just go with that match... return info.match_symbol; } // We were able to figure out a symbol size so lets make sure our // offset puts "file_addr" in the symbol's address range. - if (info.match_offset < symbol_byte_size) + if (info.match_offset < info.match_symbol->GetByteSize()) return info.match_symbol; } return nullptr; @@ -1066,7 +1065,11 @@ Symtab::FindSymbolContainingFileAddress (addr_t file_addr) const FileRangeToIndexMap::Entry *entry = m_file_addr_to_index.FindEntryThatContains(file_addr); if (entry) - return SymbolAtIndex(entry->data); + { + Symbol* symbol = SymbolAtIndex(entry->data); + if (symbol->ContainsFileAddress(file_addr)) + return symbol; + } return nullptr; } |