unwind-ia64.c (uw_install_context): Manually save LC if it hasn't been previously saved.
* config/ia64/unwind-ia64.c (uw_install_context): Manually save LC if it hasn't been previously saved. From-SVN: r186045
This commit is contained in:
parent
71bb37ba99
commit
9a9dcce8e8
2 changed files with 17 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-03-31 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* config/ia64/unwind-ia64.c (uw_install_context): Manually save LC
|
||||
if it hasn't been previously saved.
|
||||
|
||||
2012-03-29 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/i386/linux-unwind.h (x86_64_fallback_frame_state): Define
|
||||
|
|
|
@ -2169,8 +2169,20 @@ uw_install_context (struct _Unwind_Context *current __attribute__((unused)),
|
|||
struct _Unwind_Context *target)
|
||||
{
|
||||
unw_word ireg_buf[4], ireg_nat = 0, ireg_pr = 0;
|
||||
unw_word saved_lc;
|
||||
int i;
|
||||
|
||||
/* ??? LC is a fixed register so the call to __builtin_unwind_init in
|
||||
uw_init_context doesn't cause it to be saved. In case it isn't in
|
||||
the user frames either, we need to manually do so here, lest it be
|
||||
clobbered by the loop just below. */
|
||||
if (target->lc_loc == NULL)
|
||||
{
|
||||
register unw_word lc asm ("ar.lc");
|
||||
saved_lc = lc;
|
||||
target->lc_loc = &saved_lc;
|
||||
}
|
||||
|
||||
/* Copy integer register data from the target context to a
|
||||
temporary buffer. Do this so that we can frob AR.UNAT
|
||||
to get the NaT bits for these registers set properly. */
|
||||
|
|
Loading…
Add table
Reference in a new issue