Re: [patch] Fix oddity in personality routine

Jack Howarth <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
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  <[email protected]>
> 
> 	* 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.