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
This commit is contained in:
Ian Lance Taylor 2018-12-27 16:31:50 +00:00
parent 96051ee57b
commit f1410e7e2e
2 changed files with 4 additions and 1 deletions

View File

@ -1,4 +1,4 @@
785414705628bf9d1279a8042e1886440424aade 5a9ff61d72c95a50cbbfb0e1bf57646197910363
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -444,6 +444,9 @@ PERSONALITY_FUNCTION (int version,
switch (state & _US_ACTION_MASK) switch (state & _US_ACTION_MASK)
{ {
case _US_VIRTUAL_UNWIND_FRAME: 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; actions = _UA_SEARCH_PHASE;
break; break;