diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2018-12-27 16:31:50 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2018-12-27 16:31:50 +0000 |
commit | f1410e7e2e98fa3ed4112bf91c90ee6ff7476e7d (patch) | |
tree | b229759acea2e9c2609e66304ceb92c219e413b8 /libgo | |
parent | 96051ee57ba1fd7bbaa79fe880bf487eec62e54a (diff) | |
download | gcc-f1410e7e2e98fa3ed4112bf91c90ee6ff7476e7d.tar.gz |
runtime: let ARM32 EABI personality function continue unwind when called from traceback
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
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/runtime/go-unwind.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libgo/runtime/go-unwind.c b/libgo/runtime/go-unwind.c index 388d7c708a9..58cb27084a8 100644 --- a/libgo/runtime/go-unwind.c +++ b/libgo/runtime/go-unwind.c @@ -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; |