#include "unwind-pe.h"
#include <string.h> /* For memcpy */
-/* This hook allows libraries to sepecify special actions when an
- exception is thrown without a handler in place. This is deprecated
- in favour of objc_set_uncaught_exception_handler (). */
-void (*_objc_unexpected_exception) (id exception); /* !T:SAFE */
-
-
/* 'is_kind_of_exception_matcher' is our default exception matcher -
it determines if the object 'exception' is of class 'catch_class',
or of a subclass. */
info->ttype_encoding = *p++;
if (info->ttype_encoding != DW_EH_PE_omit)
{
+#if _GLIBCXX_OVERRIDE_TTYPE_ENCODING
+ /* Older ARM EABI toolchains set this value incorrectly, so use a
+ hardcoded OS-specific format. */
+ info->ttype_encoding = _GLIBCXX_OVERRIDE_TTYPE_ENCODING;
+#endif
p = read_uleb128 (p, &tmp);
info->TType = p + tmp;
}
return p;
}
-#ifdef __ARM_EABI_UNWINDER__
-
-static Class
-get_ttype_entry (struct lsda_header_info *info, _uleb128_t i)
-{
- _Unwind_Ptr ptr;
-
- ptr = (_Unwind_Ptr) (info->TType - (i * 4));
- ptr = _Unwind_decode_target2 (ptr);
-
- /* NULL ptr means catch-all. Note that if the class is not found,
- this will abort the program. */
- if (ptr)
- return objc_getRequiredClass ((const char *) ptr);
- else
- return 0;
-}
-
-#else
-
static Class
get_ttype_entry (struct lsda_header_info *info, _Unwind_Word i)
{
return 0;
}
-#endif
-
/* Using a different personality function name causes link failures
when trying to mix code using different exception handling
models. */
(*__objc_uncaught_exception_handler) (exception);
}
- /* As a last resort support the old, deprecated way of setting an
- uncaught exception handler. */
- if (_objc_unexpected_exception != 0)
- {
- (*_objc_unexpected_exception) (exception);
- }
-
abort ();
}