From ed0d100f7c513dbd9b150385fb6aa8552f6ccb3e Mon Sep 17 00:00:00 2001 From: Steve Ellcey Date: Tue, 27 May 2003 21:45:48 +0000 Subject: [PATCH] os_defines.h: Define _LIBUNWIND_STD_ABI if we are on IA64 HP-UX. * config/os/hpux/os_defines.h: Define _LIBUNWIND_STD_ABI if we are on IA64 HP-UX. * libsupc++/eh_throw.cc: Don't call _Unwind_Resume_or_Rethrow if _LIBUNWIND_STD_ABI is set. From-SVN: r67193 --- libstdc++-v3/ChangeLog | 7 +++++++ libstdc++-v3/config/os/hpux/os_defines.h | 7 +++++++ libstdc++-v3/libsupc++/eh_throw.cc | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 49115a46864..5e70b6e8838 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2003-05-27 Steve Ellcey + + * config/os/hpux/os_defines.h: Define _LIBUNWIND_STD_ABI if we are + on IA64 HP-UX. + * libsupc++/eh_throw.cc: Don't call _Unwind_Resume_or_Rethrow if + _LIBUNWIND_STD_ABI is set. + 2003-05-26 Brendan Kehoe * include/bits/locale_facets.tcc (do_get): Honor $22.2.6.3.3/8 and diff --git a/libstdc++-v3/config/os/hpux/os_defines.h b/libstdc++-v3/config/os/hpux/os_defines.h index 87d9d4f8d8e..27951c199cb 100644 --- a/libstdc++-v3/config/os/hpux/os_defines.h +++ b/libstdc++-v3/config/os/hpux/os_defines.h @@ -84,6 +84,13 @@ namespace std typedef long int __padding_type; #endif +// GCC on IA64 HP-UX uses the HP-UX system unwind library, +// it does not have the _Unwind_Resume_or_Rethrow entry point +// because that is not part of the standard IA64 Unwind ABI. +#if defined (__ia64__) +#define _LIBUNWIND_STD_ABI 1 +#endif + /* We need explicit instantiation of the atomicity lock on HPPA if there is no weak support. */ #if !defined(_GLIBCPP_SUPPORTS_WEAK) && defined (__hppa__) diff --git a/libstdc++-v3/libsupc++/eh_throw.cc b/libstdc++-v3/libsupc++/eh_throw.cc index c69c0214068..54d10fbc4f5 100644 --- a/libstdc++-v3/libsupc++/eh_throw.cc +++ b/libstdc++-v3/libsupc++/eh_throw.cc @@ -97,8 +97,12 @@ __cxa_rethrow () #ifdef _GLIBCPP_SJLJ_EXCEPTIONS _Unwind_SjLj_Resume_or_Rethrow (&header->unwindHeader); +#else +#ifdef _LIBUNWIND_STD_ABI + _Unwind_RaiseException (&header->unwindHeader); #else _Unwind_Resume_or_Rethrow (&header->unwindHeader); +#endif #endif // Some sort of unwinding error. Note that terminate is a handler.