This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug other/26208] Serious problem with unwinding through signal frames
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 Feb 2006 22:20:44 -0000
- Subject: [Bug other/26208] Serious problem with unwinding through signal frames
- References: <bug-26208-87@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #29 from jakub at gcc dot gnu dot org 2006-02-28 22:20 -------
Subject: Bug 26208
Author: jakub
Date: Tue Feb 28 22:20:34 2006
New Revision: 111581
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=111581
Log:
PR other/26208
* unwind-dw2.c (struct _Unwind_Context): Add signal_frame field.
(extract_cie_info): Handle S flag in augmentation string.
(execute_cfa_program): If context->signal_frame, execute also
fs->pc == context->ra instructions.
(uw_frame_state_for): If context->signal_frame, don't subtract one
from context->ra to find FDE.
(uw_update_context_1): Set context->signal_frame to
fs->signal_frame.
(_Unwind_GetIPInfo): New function.
* unwind-dw2.h (_Unwind_FrameState): Add signal_frame field.
* unwind-c.c (PERSONALITY_FUNCTION): Use _Unwind_GetIPInfo instead
of _Unwind_GetIP.
* unwind-sjlj.c (_Unwind_GetIPInfo): New function.
* unwind-generic.h (_Unwind_GetIPInfo): New prototype.
* unwind-compat.c (_Unwind_GetIPInfo): New function.
* libgcc-std.ver (_Unwind_GetIPInfo): Export @@GCC_4.2.0.
* config/ia64/unwind-ia64.c (_Unwind_GetIPInfo): New function.
* config/arm/unwind-arm.h (_Unwind_GetIPInfo): Define.
* config/i386/linux-unwind.h (x86_fallback_frame_state,
x86_64_fallback_frame_state): Set fs->signal_frame.
* config/rs6000/linux-unwind.h (ppc_fallback_frame_state): Likewise.
(MD_FROB_UPDATE_CONTEXT): Define unconditionally.
(frob_update_context): Likewise. Workaround missing S flag in
Linux 2.6.12 - 2.6.16 kernel vDSOs.
* config/s390/linux-unwind.h (s390_fallback_frame_state): Likewise.
Remove the psw_addr + 1 hack.
libjava/
* exception.cc (PERSONALITY_FUNCTION): Use _Unwind_GetIPInfo instead
of _Unwind_GetIP.
* include/i386-signal.h (MAKE_THROW_FRAME): Change into empty macro.
(HANDLE_DIVIDE_OVERFLOW): Don't adjust _res->eip if falling through
to throw.
* include/x86_64-signal.h (MAKE_THROW_FRAME): Change into empty
macro.
* include/powerpc-signal.h (MAKE_THROW_FRAME): Change into empty
macro.
libstdc++-v3/
* libsupc++/eh_personality.cc (PERSONALITY_FUNCTION): Use
_Unwind_GetIPInfo instead of _Unwind_GetIP.
Modified:
branches/redhat/gcc-4_1-branch/gcc/ChangeLog
branches/redhat/gcc-4_1-branch/gcc/config/arm/unwind-arm.h
branches/redhat/gcc-4_1-branch/gcc/config/i386/linux-unwind.h
branches/redhat/gcc-4_1-branch/gcc/config/ia64/unwind-ia64.c
branches/redhat/gcc-4_1-branch/gcc/config/rs6000/linux-unwind.h
branches/redhat/gcc-4_1-branch/gcc/config/s390/linux-unwind.h
branches/redhat/gcc-4_1-branch/gcc/libgcc-std.ver
branches/redhat/gcc-4_1-branch/gcc/unwind-c.c
branches/redhat/gcc-4_1-branch/gcc/unwind-compat.c
branches/redhat/gcc-4_1-branch/gcc/unwind-dw2.c
branches/redhat/gcc-4_1-branch/gcc/unwind-dw2.h
branches/redhat/gcc-4_1-branch/gcc/unwind-generic.h
branches/redhat/gcc-4_1-branch/gcc/unwind-sjlj.c
branches/redhat/gcc-4_1-branch/libjava/ChangeLog
branches/redhat/gcc-4_1-branch/libjava/exception.cc
branches/redhat/gcc-4_1-branch/libjava/include/i386-signal.h
branches/redhat/gcc-4_1-branch/libjava/include/powerpc-signal.h
branches/redhat/gcc-4_1-branch/libjava/include/x86_64-signal.h
branches/redhat/gcc-4_1-branch/libstdc++-v3/ChangeLog
branches/redhat/gcc-4_1-branch/libstdc++-v3/libsupc++/eh_personality.cc
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26208