[patch] Fix oddity in personality routine

Eric Botcazou <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
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
p.diff (text/x-diff, 408 B)
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;
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.