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:
Eric Botcazou 2012-03-31 16:24:04 +00:00 committed by Eric Botcazou
parent 71bb37ba99
commit 9a9dcce8e8
2 changed files with 17 additions and 0 deletions

View file

@ -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

View file

@ -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. */