mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-06-26 03:11:44 +02:00
(siglongjmp): If there aren't at least 4 eh-regs, abort() for now. In
the future, we may want to support this for real by putting the necessary info on the stack. (Logical change 1.81)
This commit is contained in:
parent
33e6e3fc1e
commit
5c2c73523c
|
@ -72,30 +72,32 @@ _longjmp (jmp_buf env, int val)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* found the right frame: */
|
/* found the right frame: */
|
||||||
|
|
||||||
if (sigprocmask (SIG_BLOCK, NULL, ¤t_mask) < 0)
|
if (sigprocmask (SIG_BLOCK, NULL, ¤t_mask) < 0)
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
assert (UNW_NUM_EH_REGS >= 4);
|
if (UNW_NUM_EH_REGS >= 4)
|
||||||
|
|
||||||
if (unw_set_reg (&c, UNW_REG_EH + 0, wp[1]) < 0
|
|
||||||
|| unw_set_reg (&c, UNW_REG_EH + 1, val) < 0
|
|
||||||
|| unw_set_reg (&c, UNW_REG_EH + 2,
|
|
||||||
((unw_word_t *) ¤t_mask)[0]) < 0
|
|
||||||
|| unw_set_reg (&c, UNW_REG_IP,
|
|
||||||
(unw_word_t) &_UI_siglongjmp_cont))
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
if (_NSIG > 8 * sizeof (unw_word_t))
|
|
||||||
{
|
{
|
||||||
if (_NSIG > 16 * sizeof (unw_word_t))
|
if (unw_set_reg (&c, UNW_REG_EH + 0, wp[1]) < 0
|
||||||
abort ();
|
|| unw_set_reg (&c, UNW_REG_EH + 1, val) < 0
|
||||||
if (unw_set_reg (&c, UNW_REG_EH + 3,
|
|| unw_set_reg (&c, UNW_REG_EH + 2,
|
||||||
((unw_word_t *) ¤t_mask)[1]) < 0)
|
((unw_word_t *) ¤t_mask)[0]) < 0
|
||||||
|
|| unw_set_reg (&c, UNW_REG_IP,
|
||||||
|
(unw_word_t) &_UI_siglongjmp_cont))
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
|
if (_NSIG > 8 * sizeof (unw_word_t))
|
||||||
|
{
|
||||||
|
if (_NSIG > 16 * sizeof (unw_word_t))
|
||||||
|
abort ();
|
||||||
|
if (unw_set_reg (&c, UNW_REG_EH + 3,
|
||||||
|
((unw_word_t *) ¤t_mask)[1]) < 0)
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
abort ();
|
||||||
|
|
||||||
unw_resume (&c);
|
unw_resume (&c);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue