mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-23 07:57:38 +01: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
1 changed files with 18 additions and 16 deletions
|
@ -72,30 +72,32 @@ _longjmp (jmp_buf env, int val)
|
|||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* found the right frame: */
|
||||
|
||||
if (sigprocmask (SIG_BLOCK, NULL, ¤t_mask) < 0)
|
||||
abort ();
|
||||
|
||||
assert (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 (UNW_NUM_EH_REGS >= 4)
|
||||
{
|
||||
if (_NSIG > 16 * sizeof (unw_word_t))
|
||||
abort ();
|
||||
if (unw_set_reg (&c, UNW_REG_EH + 3,
|
||||
((unw_word_t *) ¤t_mask)[1]) < 0)
|
||||
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))
|
||||
abort ();
|
||||
if (unw_set_reg (&c, UNW_REG_EH + 3,
|
||||
((unw_word_t *) ¤t_mask)[1]) < 0)
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
else
|
||||
abort ();
|
||||
|
||||
unw_resume (&c);
|
||||
|
||||
|
|
Loading…
Reference in a new issue