Author: andrew
Date: Sun Dec 21 21:38:12 2014
New Revision: 276033
URL: https://svnweb.freebsd.org/changeset/base/276033

Log:
  Fix the unwinder to get past functions with no stack but may cause an
  exception. In this case no registers will be updated but the link register
  will be copied to the program counter to be used to find the calling
  function. In this case the program counter may be updated and we should
  continue with the trace.

Modified:
  head/sys/arm/arm/db_trace.c

Modified: head/sys/arm/arm/db_trace.c
==============================================================================
--- head/sys/arm/arm/db_trace.c Sun Dec 21 21:27:12 2014        (r276032)
+++ head/sys/arm/arm/db_trace.c Sun Dec 21 21:38:12 2014        (r276033)
@@ -345,9 +345,16 @@ db_unwind_tab(struct unwind_state *state
        /*
         * The program counter was not updated, load it from the link register.
         */
-       if (state->registers[PC] == 0)
+       if (state->registers[PC] == 0) {
                state->registers[PC] = state->registers[LR];
 
+               /*
+                * If the program counter changed, flag it in the update mask.
+                */
+               if (state->start_pc != state->registers[PC])
+                       state->update_mask |= 1 << PC;
+       }
+
        return 0;
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to