]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* unwind-sjlj.c (_Unwind_GetCFA): Handle the builtin_setjmp case.
authorDaniel Jacobowitz <dan@codesourcery.com>
Wed, 16 Nov 2005 22:09:52 +0000 (22:09 +0000)
committerDaniel Jacobowitz <drow@gcc.gnu.org>
Wed, 16 Nov 2005 22:09:52 +0000 (22:09 +0000)
From-SVN: r107102

gcc/ChangeLog
gcc/unwind-sjlj.c

index 5c3a150338615e186fc645de97d80bf59acfab4a..9f35e986e385b8b4d681b0c7651a40f16280b117 100644 (file)
@@ -1,3 +1,7 @@
+2005-11-16  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * unwind-sjlj.c (_Unwind_GetCFA): Handle the builtin_setjmp case.
+
 2005-11-16  Eric Botcazou  <ebotcazou@adacore.com>
 
        * config/alpha/alpha.c (alpha_init_builtins): Use type_for_mode
index d08602da9fcad5c025da83d1d20dd004dfaca2dd..9ea6d06c9a75c17bcb3d43ec3f4508d2d2213005 100644 (file)
@@ -185,6 +185,18 @@ _Unwind_Word
 _Unwind_GetCFA (struct _Unwind_Context *context __attribute__((unused)))
 {
   /* ??? Ideally __builtin_setjmp places the CFA in the jmpbuf.  */
+
+#ifndef DONT_USE_BUILTIN_SETJMP
+  /* This is a crude imitation of the CFA: the saved stack pointer.
+     This is roughly the CFA of the frame before CONTEXT.  When using the
+     DWARF-2 unwinder _Unwind_GetCFA returns the CFA of the frame described
+     by CONTEXT instead; but for DWARF-2 the cleanups associated with
+     CONTEXT have already been run, and for SJLJ they have not yet been.  */
+  if (context->fc != NULL)
+    return (_Unwind_Word) context->fc->jbuf[2];
+#endif
+
+  /* Otherwise we're out of luck for now.  */
   return (_Unwind_Word) 0;
 }