runtime: let ARM32 EABI personality function continue unwind when called from traceback
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 27 Dec 2018 16:31:50 +0000 (16:31 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 27 Dec 2018 16:31:50 +0000 (16:31 +0000)
    On ARM32 EABI, unlike other platforms, the personality function is
    called during _Unwind_Backtrace (libgcc/unwind-arm-common.inc:581).
    In this case, simply unwind the frame without returning any
    handlers. Otherwise traceback will loop if there is a frame with
    a defer on stack.

    Reviewed-on: https://go-review.googlesource.com/c/155759

From-SVN: r267434

gcc/go/gofrontend/MERGE
libgo/runtime/go-unwind.c

index 2bcf53653d731eea1bb010c401a72a5201750c0f..056653a4d92f1a27a38f463302d76ffb4be08021 100644 (file)
@@ -1,4 +1,4 @@
-785414705628bf9d1279a8042e1886440424aade
+5a9ff61d72c95a50cbbfb0e1bf57646197910363
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 388d7c708a91d857e934d230c7d6fa7b62bd0a9f..58cb27084a88756ee79dc48aae23b70ab467f507 100644 (file)
@@ -444,6 +444,9 @@ PERSONALITY_FUNCTION (int version,
   switch (state & _US_ACTION_MASK)
     {
     case _US_VIRTUAL_UNWIND_FRAME:
+      if (state & _UA_FORCE_UNWIND)
+        /* We are called from _Unwind_Backtrace.  No handler to run.  */
+        CONTINUE_UNWINDING;
       actions = _UA_SEARCH_PHASE;
       break;