Delete old junk.
[safe/jmp/linux-2.6] / arch / mips / kernel / ptrace.c
index 2c7fc74..7428336 100644 (file)
@@ -28,7 +28,9 @@
 #include <linux/security.h>
 #include <linux/signal.h>
 
+#include <asm/byteorder.h>
 #include <asm/cpu.h>
+#include <asm/dsp.h>
 #include <asm/fpu.h>
 #include <asm/mipsregs.h>
 #include <asm/pgtable.h>
@@ -175,6 +177,30 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
                        write_c0_status(flags);
                        break;
                }
+               case DSP_BASE ... DSP_BASE + 5: {
+                       dspreg_t *dregs;
+
+                       if (!cpu_has_dsp) {
+                               tmp = 0;
+                               ret = -EIO;
+                               goto out_tsk;
+                       }
+                       if (child->thread.dsp.used_dsp) {
+                               dregs = __get_dsp_regs(child);
+                               tmp = (unsigned long) (dregs[addr - DSP_BASE]);
+                       } else {
+                               tmp = -1;       /* DSP registers yet used  */
+                       }
+                       break;
+               }
+               case DSP_CONTROL:
+                       if (!cpu_has_dsp) {
+                               tmp = 0;
+                               ret = -EIO;
+                               goto out_tsk;
+                       }
+                       tmp = child->thread.dsp.dspcontrol;
+                       break;
                default:
                        tmp = 0;
                        ret = -EIO;
@@ -247,6 +273,25 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
                        else
                                child->thread.fpu.soft.fcr31 = data;
                        break;
+               case DSP_BASE ... DSP_BASE + 5: {
+                       dspreg_t *dregs;
+
+                       if (!cpu_has_dsp) {
+                               ret = -EIO;
+                               break;
+                       }
+
+                       dregs = __get_dsp_regs(child);
+                       dregs[addr - DSP_BASE] = data;
+                       break;
+               }
+               case DSP_CONTROL:
+                       if (!cpu_has_dsp) {
+                               ret = -EIO;
+                               break;
+                       }
+                       child->thread.dsp.dspcontrol = data;
+                       break;
                default:
                        /* The rest are not allowed. */
                        ret = -EIO;
@@ -289,6 +334,11 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
                ret = ptrace_detach(child, data);
                break;
 
+       case PTRACE_GET_THREAD_AREA:
+               ret = put_user(child->thread_info->tp_value,
+                               (unsigned long __user *) data);
+               break;
+
        default:
                ret = ptrace_request(child, request, addr, data);
                break;
@@ -303,21 +353,14 @@ out:
 
 static inline int audit_arch(void)
 {
-#ifdef CONFIG_CPU_LITTLE_ENDIAN
-#ifdef CONFIG_64BIT
-       if (!(current->thread.mflags & MF_32BIT_REGS))
-               return AUDIT_ARCH_MIPSEL64;
-#endif /* MIPS64 */
-       return AUDIT_ARCH_MIPSEL;
-
-#else /* big endian... */
+       int arch = EM_MIPS;
 #ifdef CONFIG_64BIT
-       if (!(current->thread.mflags & MF_32BIT_REGS))
-               return AUDIT_ARCH_MIPS64;
-#endif /* MIPS64 */
-       return AUDIT_ARCH_MIPS;
-
-#endif /* endian */
+       arch |=  __AUDIT_ARCH_64BIT;
+#endif
+#if defined(__LITTLE_ENDIAN)
+       arch |=  __AUDIT_ARCH_LE;
+#endif
+       return arch;
 }
 
 /*
@@ -327,12 +370,13 @@ static inline int audit_arch(void)
 asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
 {
        if (unlikely(current->audit_context) && entryexit)
-               audit_syscall_exit(current, AUDITSC_RESULT(regs->regs[2]), regs->regs[2]);
+               audit_syscall_exit(current, AUDITSC_RESULT(regs->regs[2]),
+                                  regs->regs[2]);
 
-       if (!test_thread_flag(TIF_SYSCALL_TRACE))
-               goto out;
        if (!(current->ptrace & PT_PTRACED))
                goto out;
+       if (!test_thread_flag(TIF_SYSCALL_TRACE))
+               goto out;
 
        /* The 0x80 provides a way for the tracing parent to distinguish
           between a syscall stop and SIGTRAP delivery */