summaryrefslogtreecommitdiffstats
path: root/lldb/source/Symbol/Symtab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Symbol/Symtab.cpp')
-rw-r--r--lldb/source/Symbol/Symtab.cpp23
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;
}
OpenPOWER on IntegriCloud