[patch] Fix oddity in personality routine
Jack Howarth
howarth@bromo.med.uc.edu
Fri Nov 13 19:18:00 GMT 2009
On Fri, Nov 13, 2009 at 06:50:03PM +0100, Eric Botcazou wrote:
> Hi,
>> r128098 has introduced an oddity in the personality routine:
>> int ip_before_insn = 0;
> [...]
>> // Parse the LSDA header.
> p = parse_lsda_header (context, language_specific_data, &info);
> #ifdef HAVE_GETIPINFO
> ip = _Unwind_GetIPInfo (context, &ip_before_insn);
> #else
> ip = _Unwind_GetIP (context) - 1;
> #endif
> if (! ip_before_insn)
> --ip;
>> So, if !HAVE_GETIPINFO, the IP is decremented by 2! It used to be 1 and both
> libstdc++-v3/libsupc++/eh_personality.cc and ada/raise-gcc.c have the expected
> version:
>> #ifdef _GLIBCXX_HAVE_GETIPINFO
> ip = _Unwind_GetIPInfo (context, &ip_before_insn);
> #else
> ip = _Unwind_GetIP (context);
> #endif
> if (! ip_before_insn)
> --ip;
>> Hence the attached patch, that I don't plan to test though. OK anyway?
>>> 2009年11月13日 Eric Botcazou <ebotcazou@adacore.com>
>> * exception.cc (PERSONALITY_FUNCTION): Fix oversight.
>>> --
> Eric Botcazou
> Index: exception.cc
> ===================================================================
> --- exception.cc (revision 154059)
> +++ exception.cc (working copy)
> @@ -328,7 +328,7 @@ PERSONALITY_FUNCTION (int version,
> #ifdef HAVE_GETIPINFO
> ip = _Unwind_GetIPInfo (context, &ip_before_insn);
> #else
> - ip = _Unwind_GetIP (context) - 1;
> + ip = _Unwind_GetIP (context);
> #endif
> if (! ip_before_insn)
> --ip;
Shouldn't this fix also get backported to gcc-4_4-branch and
gcc-4_3-branch as well? They both have r128098.
Jack
More information about the Java
mailing list