[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;