|
@@ -228,6 +228,7 @@ int copy_thread(unsigned long clone_flags,
|
|
|
unsigned long c_usp, unsigned long ustk_size,
|
|
|
struct task_struct *p, struct pt_regs *kregs)
|
|
|
{
|
|
|
+ struct thread_info *ti = task_thread_info(p);
|
|
|
struct pt_regs *c_uregs, *c_kregs, *uregs;
|
|
|
unsigned long c_ksp;
|
|
|
|
|
@@ -248,7 +249,7 @@ int copy_thread(unsigned long clone_flags,
|
|
|
|
|
|
/* the new TLS pointer is passed in as arg #5 to sys_clone() */
|
|
|
if (clone_flags & CLONE_SETTLS)
|
|
|
- c_uregs->e2 = __frame->d3;
|
|
|
+ c_uregs->e2 = current_frame()->d3;
|
|
|
|
|
|
/* set up the return kernel frame if called from kernel_thread() */
|
|
|
c_kregs = c_uregs;
|
|
@@ -266,7 +267,7 @@ int copy_thread(unsigned long clone_flags,
|
|
|
}
|
|
|
|
|
|
/* set up things up so the scheduler can start the new task */
|
|
|
- p->thread.frame = c_kregs;
|
|
|
+ ti->frame = c_kregs;
|
|
|
p->thread.a3 = (unsigned long) c_kregs;
|
|
|
p->thread.sp = c_ksp;
|
|
|
p->thread.pc = (unsigned long) ret_from_fork;
|
|
@@ -278,25 +279,26 @@ int copy_thread(unsigned long clone_flags,
|
|
|
|
|
|
/*
|
|
|
* clone a process
|
|
|
- * - tlsptr is retrieved by copy_thread() from __frame->d3
|
|
|
+ * - tlsptr is retrieved by copy_thread() from current_frame()->d3
|
|
|
*/
|
|
|
asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp,
|
|
|
int __user *parent_tidptr, int __user *child_tidptr,
|
|
|
int __user *tlsptr)
|
|
|
{
|
|
|
- return do_fork(clone_flags, newsp ?: __frame->sp, __frame, 0,
|
|
|
- parent_tidptr, child_tidptr);
|
|
|
+ return do_fork(clone_flags, newsp ?: current_frame()->sp,
|
|
|
+ current_frame(), 0, parent_tidptr, child_tidptr);
|
|
|
}
|
|
|
|
|
|
asmlinkage long sys_fork(void)
|
|
|
{
|
|
|
- return do_fork(SIGCHLD, __frame->sp, __frame, 0, NULL, NULL);
|
|
|
+ return do_fork(SIGCHLD, current_frame()->sp,
|
|
|
+ current_frame(), 0, NULL, NULL);
|
|
|
}
|
|
|
|
|
|
asmlinkage long sys_vfork(void)
|
|
|
{
|
|
|
- return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, __frame->sp, __frame,
|
|
|
- 0, NULL, NULL);
|
|
|
+ return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, current_frame()->sp,
|
|
|
+ current_frame(), 0, NULL, NULL);
|
|
|
}
|
|
|
|
|
|
asmlinkage long sys_execve(const char __user *name,
|
|
@@ -310,7 +312,7 @@ asmlinkage long sys_execve(const char __user *name,
|
|
|
error = PTR_ERR(filename);
|
|
|
if (IS_ERR(filename))
|
|
|
return error;
|
|
|
- error = do_execve(filename, argv, envp, __frame);
|
|
|
+ error = do_execve(filename, argv, envp, current_frame());
|
|
|
putname(filename);
|
|
|
return error;
|
|
|
}
|