Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
[pandora-kernel.git] / arch / tile / kernel / single_step.c
index 1eb3b39..84a729e 100644 (file)
@@ -56,7 +56,7 @@ enum mem_op {
        MEMOP_STORE_POSTINCR
 };
 
-static inline tile_bundle_bits set_BrOff_X1(tile_bundle_bits n, int32_t offset)
+static inline tile_bundle_bits set_BrOff_X1(tile_bundle_bits n, s32 offset)
 {
        tile_bundle_bits result;
 
@@ -254,6 +254,18 @@ P("\n");
        return bundle;
 }
 
+/*
+ * Called after execve() has started the new image.  This allows us
+ * to reset the info state.  Note that the the mmap'ed memory, if there
+ * was any, has already been unmapped by the exec.
+ */
+void single_step_execve(void)
+{
+       struct thread_info *ti = current_thread_info();
+       kfree(ti->step_state);
+       ti->step_state = NULL;
+}
+
 /**
  * single_step_once() - entry point when single stepping has been triggered.
  * @regs: The machine register state
@@ -373,7 +385,7 @@ void single_step_once(struct pt_regs *regs)
                /* branches */
                case BRANCH_OPCODE_X1:
                {
-                       int32_t offset = signExtend17(get_BrOff_X1(bundle));
+                       s32 offset = signExtend17(get_BrOff_X1(bundle));
 
                        /*
                         * For branches, we use a rewriting trick to let the
@@ -731,4 +743,9 @@ void single_step_once(struct pt_regs *regs)
        __insn_mtspr(SPR_SINGLE_STEP_EN_K_K, 1 << USER_PL);
 }
 
+void single_step_execve(void)
+{
+       /* Nothing */
+}
+
 #endif /* !__tilegx__ */