[Lldb-commits] [lldb] [lldb] Fix Block::GetRangeIndexContainingAddress for discontinuous functions (PR #124931)
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Mon Feb 3 06:57:22 PST 2025
================
@@ -243,25 +243,15 @@ bool Block::GetRangeContainingAddress(const Address &addr,
AddressRange &range) {
Function *function = CalculateSymbolContextFunction();
if (function) {
- const AddressRange &func_range = function->GetAddressRange();
- if (addr.GetModule() == func_range.GetBaseAddress().GetModule()) {
- const addr_t file_addr = addr.GetFileAddress();
- const addr_t func_file_addr =
- func_range.GetBaseAddress().GetFileAddress();
- if (file_addr >= func_file_addr &&
- file_addr < func_file_addr + func_range.GetByteSize()) {
- addr_t offset = file_addr - func_file_addr;
-
- const Range *range_ptr = m_ranges.FindEntryThatContains(offset);
-
- if (range_ptr) {
- range.GetBaseAddress() =
- Address(func_file_addr + range_ptr->GetRangeBase(),
- addr.GetModule()->GetSectionList());
- range.SetByteSize(range_ptr->GetByteSize());
- return true;
- }
- }
+ if (uint32_t idx = GetRangeIndexContainingAddress(addr);
+ idx != UINT32_MAX) {
+ const Range *range_ptr = m_ranges.GetEntryAtIndex(idx);
+ assert(range_ptr);
+
+ range.GetBaseAddress() = function->GetAddress();
+ range.GetBaseAddress().Slide(range_ptr->GetRangeBase());
----------------
DavidSpickett wrote:
`function->GetAddress()` returns the address relative to the start of the range, then you slide that address up to get the absolute address of the function, right?
https://github.com/llvm/llvm-project/pull/124931
More information about the lldb-commits
mailing list