tm.texi (LIBGCC2_UNWIND_ATTRIBUTE): Document.
authorSandra Loosemore <sandra@codesourcery.com>
Fri, 14 Sep 2007 18:35:12 +0000 (14:35 -0400)
committerSandra Loosemore <sandra@gcc.gnu.org>
Fri, 14 Sep 2007 18:35:12 +0000 (14:35 -0400)
2007-09-14  Sandra Loosemore  <sandra@codesourcery.com>
    Nigel Stephens  <nigel@mips.com>

gcc/
* doc/tm.texi (LIBGCC2_UNWIND_ATTRIBUTE): Document.
* unwind-generic.h (LIBGCC2_UNWIND_ATTRIBUTE): Define.
(_Unwind_RaiseException): Add LIBGCC2_UNWIND_ATTRIBUTE to
declaration.
(_Unwind_ForcedUnwind): Likewise.
(_Unwind_Resume): Likewise.
(_Unwind_Resume_or_Rethrow): Likewise.
(_Unwind_Backtrace): Likewise.
(_Unwind_SjLj_RaiseException): Likewise.
(_Unwind_SjLj_ForcedUnwind): Likewise.
(_Unwind_SjLj_Resume): Likewise.
(_Unwind_SjLj_Resume_or_Rethrow): Likewise.
* unwind.inc (_Unwind_RaiseException): Add LIBGCC2_UNWIND_ATTRIBUTE
to definition.
(_Unwind_ForcedUnwind): Likewise.
(_Unwind_Resume): Likewise.
(_Unwind_Resume_or_Rethrow): Likewise.
(_Unwind_Backtrace): Likewise.
* unwind-compat.c (_Unwind_Backtrace): Likewise.
(_Unwind_ForcedUnwind): Likewise.
(_Unwind_RaiseException): Likewise.
(_Unwind_Resume): Likewise.
(_Unwind_Resume_or_Rethrow): Likewise.

* config/mips/mips.h (LIBGCC2_UNWIND_ATTRIBUTE): Define to force
nomips16 mode when IN_LIBGCC2 with hard float.

Co-Authored-By: Nigel Stephens <nigel@mips.com>
From-SVN: r128501

gcc/ChangeLog
gcc/config/mips/mips.h
gcc/doc/tm.texi
gcc/unwind-compat.c
gcc/unwind-generic.h
gcc/unwind.inc

index 224b458798781a7f084bf609a3d4d8f085dc537b..c51ce01730ea14aa9a775b31ba1cef43101756ce 100644 (file)
@@ -1,3 +1,33 @@
+2007-09-14  Sandra Loosemore  <sandra@codesourcery.com>
+           Nigel Stephens  <nigel@mips.com>
+
+       * doc/tm.texi (LIBGCC2_UNWIND_ATTRIBUTE): Document.
+       * unwind-generic.h (LIBGCC2_UNWIND_ATTRIBUTE): Define.
+       (_Unwind_RaiseException): Add LIBGCC2_UNWIND_ATTRIBUTE to
+       declaration.
+       (_Unwind_ForcedUnwind): Likewise.
+       (_Unwind_Resume): Likewise.
+       (_Unwind_Resume_or_Rethrow): Likewise.
+       (_Unwind_Backtrace): Likewise.
+       (_Unwind_SjLj_RaiseException): Likewise.
+       (_Unwind_SjLj_ForcedUnwind): Likewise.
+       (_Unwind_SjLj_Resume): Likewise.
+       (_Unwind_SjLj_Resume_or_Rethrow): Likewise.
+       * unwind.inc (_Unwind_RaiseException): Add LIBGCC2_UNWIND_ATTRIBUTE
+       to definition.
+       (_Unwind_ForcedUnwind): Likewise.
+       (_Unwind_Resume): Likewise.
+       (_Unwind_Resume_or_Rethrow): Likewise.
+       (_Unwind_Backtrace): Likewise.
+       * unwind-compat.c (_Unwind_Backtrace): Likewise.
+       (_Unwind_ForcedUnwind): Likewise.
+       (_Unwind_RaiseException): Likewise.
+       (_Unwind_Resume): Likewise.
+       (_Unwind_Resume_or_Rethrow): Likewise.
+
+       * config/mips/mips.h (LIBGCC2_UNWIND_ATTRIBUTE): Define to force
+       nomips16 mode when IN_LIBGCC2 with hard float.
+
 2007-09-14  Richard Sandiford  <rsandifo@nildram.co.uk>
 
        * config/mips/sdemtk.opt: Update to GPLv3.
index 55e605a8c06a86f2807dda9ea899b4669c2e6703..0d23e5661052d05a5e0ff77da47ea5675bdfa4a8 100644 (file)
@@ -582,6 +582,17 @@ extern enum mips_llsc_setting mips_llsc;
 #endif
 #endif /* IN_LIBGCC2 */
 
+/* Force the call stack unwinders in unwind.inc not to be MIPS16 code
+   when compiled with hardware floating point.  This is because MIPS16
+   code cannot save and restore the floating-point registers, which is
+   important if in a mixed MIPS16/non-MIPS16 environment.  */
+
+#ifdef IN_LIBGCC2
+#if __mips_hard_float
+#define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((__nomips16__))
+#endif
+#endif /* IN_LIBGCC2 */
+
 #define TARGET_LIBGCC_SDATA_SECTION ".sdata"
 
 #ifndef MULTILIB_ENDIAN_DEFAULT
index deb3abc2e87197e291a94270f009fbaca8a0d788..c2da9f823a21c7174a6f58d1821ab430960784dd 100644 (file)
@@ -10336,3 +10336,10 @@ SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, else 0.
 This macro determines the size of the objective C jump buffer for the
 NeXT runtime. By default, OBJC_JBLEN is defined to an innocuous value.
 @end defmac
+
+@defmac LIBGCC2_UNWIND_ATTRIBUTE
+Define this macro if any target-specific attributes need to be attached
+to the functions in @file{libgcc} that provide low-level support for 
+call stack unwinding.  It is used in declarations in @file{unwind-generic.h}
+and the associated definitions of those functions.
+@end defmac
index fa40ab27cba7bb569f3b1476978682694937ac3f..35b4fe884d46fbfc184a646fe0a645ff10038df6 100644 (file)
@@ -38,7 +38,7 @@
 extern _Unwind_Reason_Code __libunwind_Unwind_Backtrace
   (_Unwind_Trace_Fn, void *);
 
-_Unwind_Reason_Code
+_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_Backtrace (_Unwind_Trace_Fn trace, void *trace_argument)
 {
   return __libunwind_Unwind_Backtrace (trace, trace_argument);
@@ -67,7 +67,7 @@ symver (_Unwind_FindEnclosingFunction, GCC_3.3);
 extern _Unwind_Reason_Code __libunwind_Unwind_ForcedUnwind
   (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
 
-_Unwind_Reason_Code
+_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
                      _Unwind_Stop_Fn stop, void * stop_argument)
 {
@@ -166,7 +166,7 @@ symver (_Unwind_GetRegionStart, GCC_3.0);
 extern _Unwind_Reason_Code __libunwind_Unwind_RaiseException
   (struct _Unwind_Exception *);
 
-_Unwind_Reason_Code
+_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_RaiseException(struct _Unwind_Exception *exc)
 {
   return __libunwind_Unwind_RaiseException (exc);
@@ -175,7 +175,7 @@ symver (_Unwind_RaiseException, GCC_3.0);
 
 extern void __libunwind_Unwind_Resume (struct _Unwind_Exception *);
 
-void
+void LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_Resume (struct _Unwind_Exception *exc)
 {
   __libunwind_Unwind_Resume (exc);
@@ -185,7 +185,7 @@ symver (_Unwind_Resume, GCC_3.0);
 extern _Unwind_Reason_Code __libunwind_Unwind_Resume_or_Rethrow
    (struct _Unwind_Exception *);
 
-_Unwind_Reason_Code
+_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *exc)
 {
   return __libunwind_Unwind_Resume_or_Rethrow (exc);
index 4d5d14df105753e61b49832636fd1378924fd357..cebd663d954e66d651dfa453a08968d22bf48372 100644 (file)
@@ -108,6 +108,12 @@ typedef int _Unwind_Action;
 #define _UA_FORCE_UNWIND       8
 #define _UA_END_OF_STACK       16
 
+/* The target can override this macro to define any back-end-specific
+   attributes required for the lowest-level stack frame.  */
+#ifndef LIBGCC2_UNWIND_ATTRIBUTE
+#define LIBGCC2_UNWIND_ATTRIBUTE
+#endif
+
 /* This is an opaque type used to refer to a system-specific data
    structure used by the system unwinder. This context is created and
    destroyed by the system, and passed to the personality routine
@@ -115,7 +121,8 @@ typedef int _Unwind_Action;
 struct _Unwind_Context;
 
 /* Raise an exception, passing along the given exception object.  */
-extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_RaiseException (struct _Unwind_Exception *);
 
 /* Raise an exception for forced unwinding.  */
 
@@ -123,20 +130,21 @@ typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
      (int, _Unwind_Action, _Unwind_Exception_Class,
       struct _Unwind_Exception *, struct _Unwind_Context *, void *);
 
-extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
-                                                _Unwind_Stop_Fn,
-                                                void *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_ForcedUnwind (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
 
 /* Helper to invoke the exception_cleanup routine.  */
 extern void _Unwind_DeleteException (struct _Unwind_Exception *);
 
 /* Resume propagation of an existing exception.  This is used after
    e.g. executing cleanup code, and not to implement rethrowing.  */
-extern void _Unwind_Resume (struct _Unwind_Exception *);
+extern void LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_Resume (struct _Unwind_Exception *);
 
 /* @@@ Resume propagation of an FORCE_UNWIND exception, or to rethrow
    a normal exception that was handled.  */
-extern _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_Resume_or_Rethrow (struct _Unwind_Exception *);
 
 /* @@@ Use unwind data to perform a stack backtrace.  The trace callback
    is called for every stack frame in the call chain, but no cleanup
@@ -144,7 +152,8 @@ extern _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *
 typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)
      (struct _Unwind_Context *, void *);
 
-extern _Unwind_Reason_Code _Unwind_Backtrace (_Unwind_Trace_Fn, void *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_Backtrace (_Unwind_Trace_Fn, void *);
 
 /* These functions are used for communicating information about the unwind
    context (i.e. the unwind descriptors and the user register state) between
@@ -191,12 +200,14 @@ struct SjLj_Function_Context;
 extern void _Unwind_SjLj_Register (struct SjLj_Function_Context *);
 extern void _Unwind_SjLj_Unregister (struct SjLj_Function_Context *);
 
-extern _Unwind_Reason_Code _Unwind_SjLj_RaiseException
-     (struct _Unwind_Exception *);
-extern _Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind
-     (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
-extern void _Unwind_SjLj_Resume (struct _Unwind_Exception *);
-extern _Unwind_Reason_Code _Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_SjLj_RaiseException (struct _Unwind_Exception *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_SjLj_ForcedUnwind (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
+extern void LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_SjLj_Resume (struct _Unwind_Exception *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *);
 
 /* @@@ The following provide access to the base addresses for text
    and data-relative addressing in the LDSA.  In order to stay link
index b533eb58873286ac22d238450324591492eb4013..f905b47f1476654868f342bec735de867268bab3 100644 (file)
@@ -82,7 +82,7 @@ _Unwind_RaiseException_Phase2(struct _Unwind_Exception *exc,
 
 /* Raise an exception, passing along the given exception object.  */
 
-_Unwind_Reason_Code
+_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_RaiseException(struct _Unwind_Exception *exc)
 {
   struct _Unwind_Context this_context, cur_context;
@@ -195,7 +195,7 @@ _Unwind_ForcedUnwind_Phase2 (struct _Unwind_Exception *exc,
 
 /* Raise an exception for forced unwinding.  */
 
-_Unwind_Reason_Code
+_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
                      _Unwind_Stop_Fn stop, void * stop_argument)
 {
@@ -219,7 +219,7 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
 /* Resume propagation of an existing exception.  This is used after
    e.g. executing cleanup code, and not to implement rethrowing.  */
 
-void
+void LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_Resume (struct _Unwind_Exception *exc)
 {
   struct _Unwind_Context this_context, cur_context;
@@ -244,7 +244,7 @@ _Unwind_Resume (struct _Unwind_Exception *exc)
 /* Resume propagation of an FORCE_UNWIND exception, or to rethrow
    a normal exception that was handled.  */
 
-_Unwind_Reason_Code
+_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *exc)
 {
   struct _Unwind_Context this_context, cur_context;
@@ -278,7 +278,7 @@ _Unwind_DeleteException (struct _Unwind_Exception *exc)
 
 /* Perform stack backtrace through unwind data.  */
 
-_Unwind_Reason_Code
+_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
 _Unwind_Backtrace(_Unwind_Trace_Fn trace, void * trace_argument)
 {
   struct _Unwind_Context context;