mirror of git://gcc.gnu.org/git/gcc.git
eh_arm.cc (__cxa_type_match): Handle foreign exceptions.
* libsupc++/eh_arm.cc (__cxa_type_match): Handle foreign exceptions. * libsubpc++/eh_personality.cc: Don't try to set up foreign or forced unwind types here when using the ARM EABI unwinder. From-SVN: r125683
This commit is contained in:
parent
29dc9e2011
commit
ddb4f387ee
|
|
@ -1,3 +1,10 @@
|
||||||
|
2007-06-13 Richard Earnshaw <rearnsha@arm.com>
|
||||||
|
|
||||||
|
* libsupc++/eh_arm.cc (__cxa_type_match): Handle foreign
|
||||||
|
exceptions.
|
||||||
|
* libsubpc++/eh_personality.cc: Don't try to set up foreign or
|
||||||
|
forced unwind types here when using the ARM EABI unwinder.
|
||||||
|
|
||||||
2007-06-13 Paolo Carlini <pcarlini@suse.de>
|
2007-06-13 Paolo Carlini <pcarlini@suse.de>
|
||||||
|
|
||||||
* include/c_global/cmath: Tweak includes.
|
* include/c_global/cmath: Tweak includes.
|
||||||
|
|
|
||||||
|
|
@ -46,11 +46,16 @@ __cxa_type_match(_Unwind_Exception* ue_header,
|
||||||
bool is_reference __attribute__((__unused__)),
|
bool is_reference __attribute__((__unused__)),
|
||||||
void** thrown_ptr_p)
|
void** thrown_ptr_p)
|
||||||
{
|
{
|
||||||
if (!__is_gxx_exception_class(ue_header->exception_class))
|
bool foreign_exception = !__is_gxx_exception_class(ue_header->exception_class);
|
||||||
return ctm_failed;
|
|
||||||
|
|
||||||
__cxa_exception* xh = __get_exception_header_from_ue(ue_header);
|
__cxa_exception* xh = __get_exception_header_from_ue(ue_header);
|
||||||
const std::type_info* throw_type = xh->exceptionType;
|
const std::type_info* throw_type;
|
||||||
|
|
||||||
|
// XXX What to do with forced unwind?
|
||||||
|
if (foreign_exception)
|
||||||
|
throw_type = &typeid(abi::__foreign_exception);
|
||||||
|
else
|
||||||
|
throw_type = xh->exceptionType;
|
||||||
|
|
||||||
void* thrown_ptr = *thrown_ptr_p;
|
void* thrown_ptr = *thrown_ptr_p;
|
||||||
|
|
||||||
// Pointer types need to adjust the actual pointer, not
|
// Pointer types need to adjust the actual pointer, not
|
||||||
|
|
|
||||||
|
|
@ -542,6 +542,12 @@ PERSONALITY_FUNCTION (int version,
|
||||||
bool saw_cleanup = false;
|
bool saw_cleanup = false;
|
||||||
bool saw_handler = false;
|
bool saw_handler = false;
|
||||||
|
|
||||||
|
#ifdef __ARM_EABI_UNWINDER__
|
||||||
|
throw_type = ue_header;
|
||||||
|
if ((actions & _UA_FORCE_UNWIND)
|
||||||
|
|| foreign_exception)
|
||||||
|
thrown_ptr = 0;
|
||||||
|
#else
|
||||||
// During forced unwinding, match a magic exception type.
|
// During forced unwinding, match a magic exception type.
|
||||||
if (actions & _UA_FORCE_UNWIND)
|
if (actions & _UA_FORCE_UNWIND)
|
||||||
{
|
{
|
||||||
|
|
@ -556,9 +562,6 @@ PERSONALITY_FUNCTION (int version,
|
||||||
thrown_ptr = 0;
|
thrown_ptr = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#ifdef __ARM_EABI_UNWINDER__
|
|
||||||
throw_type = ue_header;
|
|
||||||
#else
|
|
||||||
throw_type = xh->exceptionType;
|
throw_type = xh->exceptionType;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue