mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-12-23 20:03:43 +01:00
(access_nat): Correct the case where a static general register got saved
to a stacked register. We can't use ia64_get_stacked() here because c->rbs will, in general, be different from the frame in which the register was saved. (Logical change 1.173)
This commit is contained in:
parent
7aa9c37cc1
commit
4a0d7bd478
1 changed files with 9 additions and 5 deletions
|
@ -325,13 +325,17 @@ access_nat (struct cursor *c, ia64_loc_t loc, ia64_loc_t reg_loc,
|
|||
}
|
||||
else if (reg >= 32)
|
||||
{
|
||||
struct rbs_area *rbs;
|
||||
unw_word_t reg_addr = IA64_GET_ADDR (reg_loc);
|
||||
|
||||
/* NaT bit is saved in a stacked register. */
|
||||
reg = rotate_gr (c, reg);
|
||||
ret = ia64_get_stacked (c, reg, ®_loc, &nat_loc);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
assert (!IA64_IS_REG_LOC (reg_loc));
|
||||
mask = (unw_word_t) 1 << ia64_rse_slot_num (IA64_GET_ADDR (reg_loc));
|
||||
|
||||
rbs = rbs_find (c, reg_addr);
|
||||
if (!rbs)
|
||||
return -UNW_EBADREG;
|
||||
nat_loc = rbs_get_rnat_loc (rbs, reg_addr);
|
||||
mask = (unw_word_t) 1 << ia64_rse_slot_num (reg_addr);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue