1
1
/* libunwind - a platform-independent unwind library
2
Copyright (C) 2003 Hewlett-Packard Co
2
Copyright (C) 2003-2004 Hewlett-Packard Co
3
3
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
5
5
This file is part of libunwind.
67
68
sol = (pfs >> 7) & 0x7f;
68
69
bsp = ia64_rse_skip_regs (bsp, sol);
71
if (bsp != wp[JB_BSP])
74
if (unlikely (sol == 0))
79
/* The caller of {sig,}setjmp() cannot have a NULL-frame.
80
If we see a NULL-frame, we haven't reached the right
81
target yet. To have a NULL-frame, the number of locals
82
must be zero and the stack-frame must also be
85
if (unw_step (&tmp) < 0)
88
if (unw_get_reg (&tmp, UNW_REG_SP, &prev_sp) < 0)
92
/* got a NULL-frame; keep looking... */
75
98
/* found the right frame: */
77
if (sigprocmask (SIG_BLOCK, NULL, ¤t_mask) < 0)
80
100
if (UNW_NUM_EH_REGS >= 4)
82
if (unw_set_reg (&c, UNW_REG_EH + 0, wp[1]) < 0
102
if (unw_set_reg (&c, UNW_REG_EH + 0, wp[JB_RP]) < 0
83
103
|| unw_set_reg (&c, UNW_REG_EH + 1, val) < 0
84
|| unw_set_reg (&c, UNW_REG_EH + 2,
85
((unw_word_t *) ¤t_mask)[0]) < 0
86
104
|| unw_set_reg (&c, UNW_REG_IP,
87
(unw_word_t) &_UI_siglongjmp_cont))
105
(unw_word_t) &_UI_longjmp_cont))
90
if (_NSIG > 8 * sizeof (unw_word_t))
92
if (_NSIG > 16 * sizeof (unw_word_t))
94
if (unw_set_reg (&c, UNW_REG_EH + 3,
95
((unw_word_t *) ¤t_mask)[1]) < 0)