1
0
Fork 0
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:
hp.com!davidm 2004-02-19 01:37:27 +00:00
parent 7aa9c37cc1
commit 4a0d7bd478

View file

@ -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, &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
{