mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-23 07:57:38 +01:00
(access_nat): Check for fp-location first and also do a direct get/put if
the NaT-location is a NaT-register. (Logical change 1.183)
This commit is contained in:
parent
94b71a1cd8
commit
43db353753
1 changed files with 10 additions and 8 deletions
|
@ -242,14 +242,6 @@ access_nat (struct cursor *c,
|
||||||
unw_fpreg_t tmp;
|
unw_fpreg_t tmp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (IA64_IS_UC_LOC (reg_loc))
|
|
||||||
{
|
|
||||||
if (write)
|
|
||||||
return ia64_put (c, nat_loc, *valp);
|
|
||||||
else
|
|
||||||
return ia64_get (c, nat_loc, valp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IA64_IS_FP_LOC (reg_loc))
|
if (IA64_IS_FP_LOC (reg_loc))
|
||||||
{
|
{
|
||||||
/* NaT bit is saved as a NaTVal. This happens when a general
|
/* NaT bit is saved as a NaTVal. This happens when a general
|
||||||
|
@ -295,6 +287,16 @@ access_nat (struct cursor *c,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((IA64_IS_REG_LOC (nat_loc)
|
||||||
|
&& (unsigned) (IA64_GET_REG (nat_loc) - UNW_IA64_NAT) < 128)
|
||||||
|
|| IA64_IS_UC_LOC (reg_loc))
|
||||||
|
{
|
||||||
|
if (write)
|
||||||
|
return ia64_put (c, nat_loc, *valp);
|
||||||
|
else
|
||||||
|
return ia64_get (c, nat_loc, valp);
|
||||||
|
}
|
||||||
|
|
||||||
if (IA64_IS_NULL_LOC (nat_loc))
|
if (IA64_IS_NULL_LOC (nat_loc))
|
||||||
{
|
{
|
||||||
/* NaT bit is not saved. This happens if a general register is
|
/* NaT bit is not saved. This happens if a general register is
|
||||||
|
|
Loading…
Reference in a new issue