This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
[patch] Fix oddity in personality routine
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: java at gcc dot gnu dot org
- Date: Fri, 13 Nov 2009 18:50:03 +0100
- Subject: [patch] Fix oddity in personality routine
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;