db23a2053a
mainline has become GCC 9 and the 20180429 snapshot of GCC 9.0.0 is the first of its kind. Accordingly introduce the gcc9-devel port to track this development of what ultimately is going to become the GCC 9 release series.
106 lines
3.4 KiB
Text
106 lines
3.4 KiB
Text
--- UTC
|
|
Index: gcc/ginclude/unwind-arm-common.h
|
|
===================================================================
|
|
--- gcc/ginclude/unwind-arm-common.h (revision 219113)
|
|
+++ gcc/ginclude/unwind-arm-common.h (working copy)
|
|
@@ -82,7 +82,11 @@
|
|
|
|
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
|
|
@@ -181,7 +185,11 @@
|
|
|
|
/* 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 *);
|
|
Index: libstdc++-v3/libsupc++/unwind-cxx.h
|
|
===================================================================
|
|
--- libstdc++-v3/libsupc++/unwind-cxx.h (revision 219147)
|
|
+++ libstdc++-v3/libsupc++/unwind-cxx.h (working copy)
|
|
@@ -235,7 +235,7 @@
|
|
return reinterpret_cast<__cxa_dependent_exception *>(exc + 1) - 1;
|
|
}
|
|
|
|
-#ifdef __ARM_EABI_UNWINDER__
|
|
+#if defined(__ARM_EABI_UNWINDER__) && !defined(__FreeBSD__)
|
|
static inline bool
|
|
__is_gxx_exception_class(_Unwind_Exception_Class c)
|
|
{
|
|
@@ -309,13 +309,7 @@
|
|
c[6] = 'R';
|
|
c[7] = '\0';
|
|
}
|
|
-
|
|
-static inline void*
|
|
-__gxx_caught_object(_Unwind_Exception* eo)
|
|
-{
|
|
- return (void*)eo->barrier_cache.bitpattern[0];
|
|
-}
|
|
-#else // !__ARM_EABI_UNWINDER__
|
|
+#else // !__ARM_EABI_UNWINDER__ || __FreeBSD__
|
|
// This is the primary exception class we report -- "GNUCC++\0".
|
|
const _Unwind_Exception_Class __gxx_primary_exception_class
|
|
= ((((((((_Unwind_Exception_Class) 'G'
|
|
@@ -339,6 +333,16 @@
|
|
<< 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)
|
|
{
|
|
@@ -346,6 +350,12 @@
|
|
|| 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
|
|
@@ -357,7 +367,18 @@
|
|
#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
|
|
(int, _Unwind_Action, _Unwind_Exception_Class,
|