]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - arch/powerpc/kernel/traps.c
powerpc: move debug registers in a structure
[linux.git] / arch / powerpc / kernel / traps.c
index f783c932faeb3717eca6136cab5ab350f01e9a6e..4f5df4e7df129666e727fd8afe2146e3d2ef83c9 100644 (file)
@@ -351,8 +351,8 @@ static inline int check_io_access(struct pt_regs *regs)
 #define REASON_TRAP            ESR_PTR
 
 /* single-step stuff */
-#define single_stepping(regs)  (current->thread.dbcr0 & DBCR0_IC)
-#define clear_single_step(regs)        (current->thread.dbcr0 &= ~DBCR0_IC)
+#define single_stepping(regs)  (current->thread.debug.dbcr0 & DBCR0_IC)
+#define clear_single_step(regs)        (current->thread.debug.dbcr0 &= ~DBCR0_IC)
 
 #else
 /* On non-4xx, the reason for the machine check or program
@@ -1486,7 +1486,7 @@ static void handle_debug(struct pt_regs *regs, unsigned long debug_status)
        if (debug_status & (DBSR_DAC1R | DBSR_DAC1W)) {
                dbcr_dac(current) &= ~(DBCR_DAC1R | DBCR_DAC1W);
 #ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
-               current->thread.dbcr2 &= ~DBCR2_DAC12MODE;
+               current->thread.debug.dbcr2 &= ~DBCR2_DAC12MODE;
 #endif
                do_send_trap(regs, mfspr(SPRN_DAC1), debug_status, TRAP_HWBKPT,
                             5);
@@ -1497,24 +1497,24 @@ static void handle_debug(struct pt_regs *regs, unsigned long debug_status)
                             6);
                changed |= 0x01;
        }  else if (debug_status & DBSR_IAC1) {
-               current->thread.dbcr0 &= ~DBCR0_IAC1;
+               current->thread.debug.dbcr0 &= ~DBCR0_IAC1;
                dbcr_iac_range(current) &= ~DBCR_IAC12MODE;
                do_send_trap(regs, mfspr(SPRN_IAC1), debug_status, TRAP_HWBKPT,
                             1);
                changed |= 0x01;
        }  else if (debug_status & DBSR_IAC2) {
-               current->thread.dbcr0 &= ~DBCR0_IAC2;
+               current->thread.debug.dbcr0 &= ~DBCR0_IAC2;
                do_send_trap(regs, mfspr(SPRN_IAC2), debug_status, TRAP_HWBKPT,
                             2);
                changed |= 0x01;
        }  else if (debug_status & DBSR_IAC3) {
-               current->thread.dbcr0 &= ~DBCR0_IAC3;
+               current->thread.debug.dbcr0 &= ~DBCR0_IAC3;
                dbcr_iac_range(current) &= ~DBCR_IAC34MODE;
                do_send_trap(regs, mfspr(SPRN_IAC3), debug_status, TRAP_HWBKPT,
                             3);
                changed |= 0x01;
        }  else if (debug_status & DBSR_IAC4) {
-               current->thread.dbcr0 &= ~DBCR0_IAC4;
+               current->thread.debug.dbcr0 &= ~DBCR0_IAC4;
                do_send_trap(regs, mfspr(SPRN_IAC4), debug_status, TRAP_HWBKPT,
                             4);
                changed |= 0x01;
@@ -1524,19 +1524,20 @@ static void handle_debug(struct pt_regs *regs, unsigned long debug_status)
         * Check all other debug flags and see if that bit needs to be turned
         * back on or not.
         */
-       if (DBCR_ACTIVE_EVENTS(current->thread.dbcr0, current->thread.dbcr1))
+       if (DBCR_ACTIVE_EVENTS(current->thread.debug.dbcr0,
+                              current->thread.debug.dbcr1))
                regs->msr |= MSR_DE;
        else
                /* Make sure the IDM flag is off */
-               current->thread.dbcr0 &= ~DBCR0_IDM;
+               current->thread.debug.dbcr0 &= ~DBCR0_IDM;
 
        if (changed & 0x01)
-               mtspr(SPRN_DBCR0, current->thread.dbcr0);
+               mtspr(SPRN_DBCR0, current->thread.debug.dbcr0);
 }
 
 void __kprobes DebugException(struct pt_regs *regs, unsigned long debug_status)
 {
-       current->thread.dbsr = debug_status;
+       current->thread.debug.dbsr = debug_status;
 
        /* Hack alert: On BookE, Branch Taken stops on the branch itself, while
         * on server, it stops on the target of the branch. In order to simulate
@@ -1553,8 +1554,8 @@ void __kprobes DebugException(struct pt_regs *regs, unsigned long debug_status)
 
                /* Do the single step trick only when coming from userspace */
                if (user_mode(regs)) {
-                       current->thread.dbcr0 &= ~DBCR0_BT;
-                       current->thread.dbcr0 |= DBCR0_IDM | DBCR0_IC;
+                       current->thread.debug.dbcr0 &= ~DBCR0_BT;
+                       current->thread.debug.dbcr0 |= DBCR0_IDM | DBCR0_IC;
                        regs->msr |= MSR_DE;
                        return;
                }
@@ -1582,13 +1583,13 @@ void __kprobes DebugException(struct pt_regs *regs, unsigned long debug_status)
                        return;
 
                if (user_mode(regs)) {
-                       current->thread.dbcr0 &= ~DBCR0_IC;
-                       if (DBCR_ACTIVE_EVENTS(current->thread.dbcr0,
-                                              current->thread.dbcr1))
+                       current->thread.debug.dbcr0 &= ~DBCR0_IC;
+                       if (DBCR_ACTIVE_EVENTS(current->thread.debug.dbcr0,
+                                              current->thread.debug.dbcr1))
                                regs->msr |= MSR_DE;
                        else
                                /* Make sure the IDM bit is off */
-                               current->thread.dbcr0 &= ~DBCR0_IDM;
+                               current->thread.debug.dbcr0 &= ~DBCR0_IDM;
                }
 
                _exception(SIGTRAP, regs, TRAP_TRACE, regs->nip);