1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-06-16 23: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:
hp.com!davidm 2003-04-21 23:14:14 +00:00
parent 33e6e3fc1e
commit 5c2c73523c

View file

@ -72,30 +72,32 @@ _longjmp (jmp_buf env, int val)
}
#endif
/* found the right frame: */
if (sigprocmask (SIG_BLOCK, NULL, &current_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 *) &current_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 *) &current_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 *) &current_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 *) &current_mask)[1]) < 0)
abort ();
}
}
else
abort ();
unw_resume (&c);