* 2 of the License, or (at your option) any later version.
*/
+#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
return put_user(val, (unsigned int __user *) adr);
}
-int set_endian(struct task_struct *tsk, unsigned int val)
-{
- struct pt_regs *regs = tsk->thread.regs;
-
- if ((val == PR_ENDIAN_LITTLE && !cpu_has_feature(CPU_FTR_REAL_LE)) ||
- (val == PR_ENDIAN_PPC_LITTLE && !cpu_has_feature(CPU_FTR_PPC_LE)))
- return -EINVAL;
-
- if (regs == NULL)
- return -EINVAL;
-
- if (val == PR_ENDIAN_BIG)
- regs->msr &= ~MSR_LE;
- else if (val == PR_ENDIAN_LITTLE || val == PR_ENDIAN_PPC_LITTLE)
- regs->msr |= MSR_LE;
- else
- return -EINVAL;
-
- return 0;
-}
-
-int get_endian(struct task_struct *tsk, unsigned long adr)
-{
- struct pt_regs *regs = tsk->thread.regs;
- unsigned int val;
-
- if (!cpu_has_feature(CPU_FTR_PPC_LE) &&
- !cpu_has_feature(CPU_FTR_REAL_LE))
- return -EINVAL;
-
- if (regs == NULL)
- return -EINVAL;
-
- if (regs->msr & MSR_LE) {
- if (cpu_has_feature(CPU_FTR_REAL_LE))
- val = PR_ENDIAN_LITTLE;
- else
- val = PR_ENDIAN_PPC_LITTLE;
- } else
- val = PR_ENDIAN_BIG;
-
- return put_user(val, (unsigned int __user *)adr);
-}
-
-int set_unalign_ctl(struct task_struct *tsk, unsigned int val)
-{
- tsk->thread.align_ctl = val;
- return 0;
-}
-
-int get_unalign_ctl(struct task_struct *tsk, unsigned long adr)
-{
- return put_user(tsk->thread.align_ctl, (unsigned int __user *)adr);
-}
-
#define TRUNC_PTR(x) ((typeof(x))(((unsigned long)(x)) & 0xffffffff))
int sys_clone(unsigned long clone_flags, unsigned long usp,
flush_spe_to_thread(current);
error = do_execve(filename, (char __user * __user *) a1,
(char __user * __user *) a2, regs);
+ if (error == 0) {
+ task_lock(current);
+ current->ptrace &= ~PT_DTRACE;
+ task_unlock(current);
+ }
putname(filename);
out:
return error;