mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2025-01-11 11:33:43 +01:00
(ia64_local_resume): Use rbs_cover_and_flush() to linearize the contents of the
current register frame before resuming execution. Drop loadrs argument from call to _Uia64_install_context(). (Logical change 1.47)
This commit is contained in:
parent
03f6e9b004
commit
02c8c0cdae
1 changed files with 4 additions and 7 deletions
|
@ -34,7 +34,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
HIDDEN inline int
|
HIDDEN inline int
|
||||||
ia64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
|
ia64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
|
||||||
{
|
{
|
||||||
unw_word_t val, sol, sof, pri_unat, loadrs, n, bspstore, pfs;
|
unw_word_t val, sol, sof, pri_unat, loadrs, n, pfs;
|
||||||
struct cursor *c = (struct cursor *) cursor;
|
struct cursor *c = (struct cursor *) cursor;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -105,9 +105,7 @@ ia64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
|
||||||
c->psp = (c->sigcontext_loc - c->sigcontext_off);
|
c->psp = (c->sigcontext_loc - c->sigcontext_off);
|
||||||
|
|
||||||
sof = (c->cfm & 0x7f);
|
sof = (c->cfm & 0x7f);
|
||||||
bspstore = c->bsp;
|
rbs_cover_and_flush (c, sof);
|
||||||
c->bsp = ia64_rse_skip_regs (bspstore, sof);
|
|
||||||
loadrs = 0;
|
|
||||||
|
|
||||||
sc->sc_ip = c->ip;
|
sc->sc_ip = c->ip;
|
||||||
sc->sc_cfm = c->cfm & (((unw_word_t) 1 << 38) - 1);
|
sc->sc_cfm = c->cfm & (((unw_word_t) 1 << 38) - 1);
|
||||||
|
@ -130,8 +128,7 @@ ia64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
|
||||||
if ((ret = ia64_get (c, c->pfs_loc, &pfs)) < 0)
|
if ((ret = ia64_get (c, c->pfs_loc, &pfs)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
sol = (pfs >> 7) & 0x7f;
|
sol = (pfs >> 7) & 0x7f;
|
||||||
c->bsp = ia64_rse_skip_regs (c->bsp, sol);
|
rbs_cover_and_flush (c, sol);
|
||||||
loadrs = 0;
|
|
||||||
|
|
||||||
extra.r1 = c->pi.gp;
|
extra.r1 = c->pi.gp;
|
||||||
extra.r15 = c->eh_args[0];
|
extra.r15 = c->eh_args[0];
|
||||||
|
@ -139,7 +136,7 @@ ia64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
|
||||||
extra.r17 = c->eh_args[2];
|
extra.r17 = c->eh_args[2];
|
||||||
extra.r18 = c->eh_args[3];
|
extra.r18 = c->eh_args[3];
|
||||||
}
|
}
|
||||||
_Uia64_install_context (c, pri_unat, (unw_word_t *) &extra, loadrs);
|
_Uia64_install_context (c, pri_unat, (unw_word_t *) &extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* !UNW_REMOTE_ONLY */
|
#endif /* !UNW_REMOTE_ONLY */
|
||||||
|
|
Loading…
Reference in a new issue