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: r186046
This commit is contained in:
Eric Botcazou 2012-03-31 16:24:24 +00:00 committed by Eric Botcazou
parent d71308302b
commit d2aabfb127
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-28 Georg-Johann Lay <avr@gjlay.de>
Backport from 2012-03-28 mainline r185907.

View File

@ -2171,8 +2171,20 @@ uw_install_context (struct _Unwind_Context *current __attribute__((unused)),
struct _Unwind_Context *target)
{
unsigned long ireg_buf[4], ireg_nat = 0, ireg_pr = 0;
unsigned long saved_lc;
long 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 unsigned long 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. */