summaryrefslogtreecommitdiff
path: root/lang/gcc/files/patch-arm-unwind-cxx-support
diff options
context:
space:
mode:
authorGerald Pfeifer <gerald@FreeBSD.org>2017-04-01 15:03:21 +0000
committerGerald Pfeifer <gerald@FreeBSD.org>2017-04-01 15:03:21 +0000
commitd39ad836d1ab4367b3bc4d8e47ea54824d74bc1b (patch)
treed2163da680f2859bb51debaaa136d66c377c5101 /lang/gcc/files/patch-arm-unwind-cxx-support
parentActually remove llvm37 and clang37 (diff)
Update lang/gcc and hence the default version of GCC in the Ports
Collection (requested by USE_GCC=yes and various USES=compiler invocations) from GCC 4.9.4 to GCC 5.4. files/patch-arm-support and files/patch-gcc_system.h have become obsolete. New patches files/patch-arm-unwind-cxx-support and files/patch-libc++ help support arm targets and new libc++ in base. ONLY_FOR_ARCHS now also includes arm. A new option GRAPHITE_DESC, off by default for now, adds support for Graphite loop optimizations. Finally, conflicts with other lang/gcc* ports are adjusted suitably. In terms of changes for users, this upgrade brings the following: The default mode for C is now -std=gnu11 instead of -std=gnu89. New warning options -Wc90-c99-compat and -Wc99-c11-compat may prove useful on that front. The C++ front end now has full C++14 language support including C++14 variable templates, C++14 aggregates with non-static data member initializers, C++14 extended constexpr, and more. The Standard C++ Library (libstdc++) has full C++11 support and experimental full C++14 support. It uses a new ABI by default. There have been significant improvements to inter-procedural optimizations and link-time optimization such as One Definition Rule based merging of C++ types as well as register allocation. OpenMP 4.0 specification offloading features are now supported by the C, C++, and Fortran compilers. Cilk Plus, an extension to the C and C++ languages to support data and task parallelism, has been added as well. New warning options -Wswitch-bool, -Wlogical-not-parentheses, -Wbool-compare and -Wsizeof-array-argument may prove useful as may new preprocessor directives __has_include, __has_include_next, and __has_attribute. GCC can now be built as a shared library for embedding in other processes (such as interpreters), suitable for Just-In-Time compilation to machine code. This provides a C API and a C++ wrapper API. Many code generation improvements for AArch64, ARM, support for AVX-512{BW,DQ,VL,IFMA,VBMI} and Intel MPX on x86-64, and generally improvements on many targets. The Local Register Allocator (LRA) now contains a rematerialization subpass and is able to reuse the PIC hard register on x86/x86-64 to improve performance of position independent code. https://gcc.gnu.org/gcc-5/changes.html has a more extensive set of changes and https://gcc.gnu.org/gcc-5/porting_to.html has a solid overview of issue you may encountering porting to this new version. PR: 216707, 218125 Tested by: antoine (-exp runs) Supported by: jbeich, tcberner, and others
Notes
Notes: svn path=/head/; revision=437437
Diffstat (limited to 'lang/gcc/files/patch-arm-unwind-cxx-support')
-rw-r--r--lang/gcc/files/patch-arm-unwind-cxx-support106
1 files changed, 106 insertions, 0 deletions
diff --git a/lang/gcc/files/patch-arm-unwind-cxx-support b/lang/gcc/files/patch-arm-unwind-cxx-support
new file mode 100644
index 000000000000..ec6959b9655c
--- /dev/null
+++ b/lang/gcc/files/patch-arm-unwind-cxx-support
@@ -0,0 +1,106 @@
+--- 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,