struct _Unwind_Control_Block
{
-#ifdef __FreeBSD__
- unsigned exception_class __attribute__((__mode__(__DI__)));
-#else
char exception_class[8];
-#endif
void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *);
/* Unwinder cache, private fields for the unwinder's use */
struct
/* Support functions for the PR. */
#define _Unwind_Exception _Unwind_Control_Block
-#ifdef __FreeBSD__
- typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
-#else
typedef char _Unwind_Exception_Class[8];
-#endif
void * _Unwind_GetLanguageSpecificData (_Unwind_Context *);
_Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *);
return reinterpret_cast<__cxa_dependent_exception *>(exc + 1) - 1;
}
-#if defined (__ARM_EABI_UNWINDER__) && !defined (__FreeBSD__)
+#ifdef __ARM_EABI_UNWINDER__
static inline bool
__is_gxx_exception_class(_Unwind_Exception_Class c)
{
c[6] = 'R';
c[7] = '\0';
}
-#else // !__ARM_EABI_UNWINDER__ || __FreeBSD__
+
+static inline void*
+__gxx_caught_object(_Unwind_Exception* eo)
+{
+ return (void*)eo->barrier_cache.bitpattern[0];
+}
+#else // !__ARM_EABI_UNWINDER__
// This is the primary exception class we report -- "GNUCC++\0".
const _Unwind_Exception_Class __gxx_primary_exception_class
= ((((((((_Unwind_Exception_Class) 'G'
<< 8 | (_Unwind_Exception_Class) '+')
<< 8 | (_Unwind_Exception_Class) '\x01');
-const _Unwind_Exception_Class __gxx_forced_unwind_class
-= ((((((((_Unwind_Exception_Class) 'G'
- << 8 | (_Unwind_Exception_Class) 'N')
- << 8 | (_Unwind_Exception_Class) 'U')
- << 8 | (_Unwind_Exception_Class) 'C')
- << 8 | (_Unwind_Exception_Class) 'F')
- << 8 | (_Unwind_Exception_Class) 'O')
- << 8 | (_Unwind_Exception_Class) 'R')
- << 8 | (_Unwind_Exception_Class) '\0');
-
static inline bool
__is_gxx_exception_class(_Unwind_Exception_Class c)
{
|| c == __gxx_dependent_exception_class;
}
-static inline bool
-__is_gxx_forced_unwind_class(_Unwind_Exception_Class c)
-{
- return c == __gxx_forced_unwind_class;
-}
-
// Only checks for primary or dependent, but not that it is a C++ exception at
// all.
static inline bool
#define __GXX_INIT_PRIMARY_EXCEPTION_CLASS(c) c = __gxx_primary_exception_class
#define __GXX_INIT_DEPENDENT_EXCEPTION_CLASS(c) \
c = __gxx_dependent_exception_class
-#define __GXX_INIT_FORCED_UNWIND_CLASS(c) c = __gxx_forced_unwind_class
-#endif // __ARM_EABI_UNWINDER__ && !__FreeBSD__
-
-#ifdef __ARM_EABI_UNWINDER__
-static inline void*
-__gxx_caught_object(_Unwind_Exception* eo)
-{
- return (void*)eo->barrier_cache.bitpattern[0];
-}
-
-#else // !__ARM_EABI_UNWINDER__
// GNU C++ personality routine, Version 0.
extern "C" _Unwind_Reason_Code __gxx_personality_v0