[PATCH] arm: task_thread_info()
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / arm / kernel / ptrace.c
index 9a340e790da52a9b801857c2da22226f89c91d66..f003062c9457bbc2458b93d13b6bba95257f4e07 100644 (file)
@@ -242,6 +242,15 @@ get_branch_address(struct task_struct *child, unsigned long pc, unsigned long in
                 */
                long aluop1, aluop2, ccbit;
 
+               if ((insn & 0x0fffffd0) == 0x012fff10) {
+                       /*
+                        * bx or blx
+                        */
+                       alt = get_user_reg(child, insn & 15);
+                       break;
+               }
+
+
                if ((insn & 0xf000) != 0xf000)
                        break;
 
@@ -595,7 +604,7 @@ static int ptrace_setregs(struct task_struct *tsk, void __user *uregs)
  */
 static int ptrace_getfpregs(struct task_struct *tsk, void __user *ufp)
 {
-       return copy_to_user(ufp, &tsk->thread_info->fpstate,
+       return copy_to_user(ufp, &task_thread_info(tsk)->fpstate,
                            sizeof(struct user_fp)) ? -EFAULT : 0;
 }
 
@@ -604,7 +613,7 @@ static int ptrace_getfpregs(struct task_struct *tsk, void __user *ufp)
  */
 static int ptrace_setfpregs(struct task_struct *tsk, void __user *ufp)
 {
-       struct thread_info *thread = tsk->thread_info;
+       struct thread_info *thread = task_thread_info(tsk);
        thread->used_cp[1] = thread->used_cp[2] = 1;
        return copy_from_user(&thread->fpstate, ufp,
                              sizeof(struct user_fp)) ? -EFAULT : 0;
@@ -617,7 +626,7 @@ static int ptrace_setfpregs(struct task_struct *tsk, void __user *ufp)
  */
 static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp)
 {
-       struct thread_info *thread = tsk->thread_info;
+       struct thread_info *thread = task_thread_info(tsk);
        void *ptr = &thread->fpstate;
 
        if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT))
@@ -634,7 +643,7 @@ static int ptrace_getwmmxregs(struct task_struct *tsk, void __user *ufp)
  */
 static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp)
 {
-       struct thread_info *thread = tsk->thread_info;
+       struct thread_info *thread = task_thread_info(tsk);
        void *ptr = &thread->fpstate;
 
        if (!test_ti_thread_flag(thread, TIF_USING_IWMMXT))
@@ -770,7 +779,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
 #endif
 
                case PTRACE_GET_THREAD_AREA:
-                       ret = put_user(child->thread_info->tp_value,
+                       ret = put_user(task_thread_info(child)->tp_value,
                                       (unsigned long __user *) data);
                        break;