Author: andrew
Date: Thu Jun 27 22:26:56 2013
New Revision: 252320
URL: http://svnweb.freebsd.org/changeset/base/252320

Log:
  Support reading registers r0-r3 when unwinding. There is a seperate
  instruction to load these. We only hit it when unwinding past an trap frame
  as in C r0-r3 would never have been saved onto the stack.

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

Modified: head/sys/arm/arm/db_trace.c
==============================================================================
--- head/sys/arm/arm/db_trace.c Thu Jun 27 21:34:29 2013        (r252319)
+++ head/sys/arm/arm/db_trace.c Thu Jun 27 22:26:56 2013        (r252320)
@@ -108,6 +108,7 @@ extern int extab_start, extab_end, exidx
 #define        INSN_VSP_REG            0x90
 #define        INSN_POP_COUNT          0xa0
 #define        INSN_FINISH             0xb0
+#define        INSN_POP_REGS           0xb1
 #define        INSN_VSP_LARGE_INC      0xb2
 
 /* An item in the exception index table */
@@ -268,6 +269,24 @@ db_unwind_exec_insn(struct unwind_state 
                /* Stop processing */
                state->entries = 0;
 
+       } else if ((insn == INSN_POP_REGS)) {
+               unsigned int mask, reg;
+
+               mask = db_unwind_exec_read_byte(state);
+               if (mask == 0 || (mask & 0xf0) != 0)
+                       return 1;
+
+               /* Update SP */
+               update_vsp = 1;
+
+               /* Load the registers */
+               for (reg = 0; mask && reg < 4; mask >>= 1, reg++) {
+                       if (mask & 1) {
+                               state->registers[reg] = *vsp++;
+                               state->update_mask |= 1 << reg;
+                       }
+               }
+
        } else if ((insn & INSN_VSP_LARGE_INC_MASK) == INSN_VSP_LARGE_INC) {
                unsigned int uleb128;
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to