Fix address adjusment in stack frame inline block lookup

When the current address is pointing 1 (unit) over the end of a
section the we have to do a section lookup after making the adjusment
of the current address.

Differential revision: http://reviews.llvm.org/D10124

llvm-svn: 238737
This commit is contained in:
Tamas Berghammer 2015-06-01 10:38:23 +00:00
parent 1699eca119
commit 0f8452ba2e
1 changed files with 15 additions and 1 deletions

View File

@ -355,7 +355,21 @@ StackFrameList::GetFramesUpTo(uint32_t end_idx)
// address, else we decrement the address by one to get the correct
// location.
if (idx > 0)
curr_frame_address.Slide(-1);
{
if (curr_frame_address.GetOffset() == 0)
{
// If curr_frame_address points to the first address in a section then after
// adjustment it will point to an other section. In that case resolve the
// address again to the correct section plus offset form.
TargetSP target = m_thread.CalculateTarget();
addr_t load_addr = curr_frame_address.GetOpcodeLoadAddress(target.get());
curr_frame_address.SetOpcodeLoadAddress(load_addr - 1, target.get());
}
else
{
curr_frame_address.Slide(-1);
}
}
SymbolContext next_frame_sc;
Address next_frame_address;