pr-support.c (__gnu_unwind_24bit): Correct logic for the case where B3 isn't the return register.

* config/c6x/pr-support.c (__gnu_unwind_24bit): Correct logic for the
	case where B3 isn't the return register.

From-SVN: r180434
This commit is contained in:
Bernd Schmidt 2011-10-25 15:44:03 +00:00 committed by Bernd Schmidt
parent 793ff12bf2
commit 5b2d9d9084
2 changed files with 14 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2011-10-25 Bernd Schmidt <bernds@codesourcery.com>
* config/c6x/pr-support.c (__gnu_unwind_24bit): Correct logic for the
case where B3 isn't the return register.
2011-10-25 Andreas Tobler <andreast@fgznet.ch>
* config/rs6000/t-freebsd: Add wildcard.

View file

@ -273,6 +273,14 @@ __gnu_unwind_24bit (_Unwind_Context * context, _uw data, int compact)
_uw mask;
_uw *ptr;
_uw tmp;
int ret_reg = unwind_frame_regs[data & 0xf];
if (ret_reg != R_B3)
{
_Unwind_VRS_Get (context, _UVRSC_CORE, unwind_frame_regs[data & 0xf],
_UVRSD_UINT32, &tmp);
_Unwind_VRS_Set (context, _UVRSC_CORE, R_B3, _UVRSD_UINT32, &tmp);
}
mask = (data >> 4) & 0x1fff;
@ -291,8 +299,7 @@ __gnu_unwind_24bit (_Unwind_Context * context, _uw data, int compact)
else
pop_frame (context, mask, ptr, offset != 0x7f);
_Unwind_VRS_Get (context, _UVRSC_CORE, unwind_frame_regs[data & 0xf],
_UVRSD_UINT32, &tmp);
_Unwind_VRS_Get (context, _UVRSC_CORE, R_B3, _UVRSD_UINT32, &tmp);
_Unwind_VRS_Set (context, _UVRSC_CORE, R_PC, _UVRSD_UINT32, &tmp);
return _URC_OK;