From: Eric Botcazou Date: Sat, 31 Mar 2012 16:24:04 +0000 (+0000) Subject: unwind-ia64.c (uw_install_context): Manually save LC if it hasn't been previously... X-Git-Tag: upstream/12.2.0~77099 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9a9dcce8e8f235bddcbb89bf6010577686b4627b;p=platform%2Fupstream%2Fgcc.git 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 --- diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index f44f52e..0adcc5a 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2012-03-31 Eric Botcazou + + * config/ia64/unwind-ia64.c (uw_install_context): Manually save LC + if it hasn't been previously saved. + 2012-03-29 H.J. Lu * config/i386/linux-unwind.h (x86_64_fallback_frame_state): Define diff --git a/libgcc/config/ia64/unwind-ia64.c b/libgcc/config/ia64/unwind-ia64.c index 10cf136..2bb9100 100644 --- a/libgcc/config/ia64/unwind-ia64.c +++ b/libgcc/config/ia64/unwind-ia64.c @@ -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. */