summaryrefslogtreecommitdiffstats
path: root/arch/m68k/kernel/entry.S
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-09-16 18:06:34 +0200
committerAl Viro <viro@zeniv.linux.org.uk>2012-10-01 06:44:44 +0200
commitd878d6dacee2c862f02da20f7fa3e2c0e8820e71 (patch)
treec594e7cc3d49e2af55f6fe9706a2fc618dc3f150 /arch/m68k/kernel/entry.S
parentm68k: split ret_from_fork(), simplify kernel_thread() (diff)
downloadlinux-d878d6dacee2c862f02da20f7fa3e2c0e8820e71.tar.xz
linux-d878d6dacee2c862f02da20f7fa3e2c0e8820e71.zip
m68k: switch to generic sys_execve()/kernel_execve()
The tricky part here is that task_pt_regs() on m68k works *only* for process inside do_signal(). However, we need something much simpler - pt_regs of a process inside do_signal() may be at different offsets from the stack bottom, depending on the way we'd entered the kernel, but for a task inside sys_execve() it *is* at constant offset. Moreover, for a kernel thread about to become a userland process the same location is also fine - setting sp to that will leave the kernel stack pointer at the very bottom of the kernel stack when we finally switch to userland. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/m68k/kernel/entry.S')
-rw-r--r--arch/m68k/kernel/entry.S5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S
index 8a01f580a024..946cb0187751 100644
--- a/arch/m68k/kernel/entry.S
+++ b/arch/m68k/kernel/entry.S
@@ -122,6 +122,11 @@ ENTRY(ret_from_kernel_thread)
movel %d0,(%sp)
jra sys_exit
+ENTRY(ret_from_kernel_execve)
+ movel 4(%sp), %sp
+ GET_CURRENT(%d0)
+ jra ret_from_exception
+
#if defined(CONFIG_COLDFIRE) || !defined(CONFIG_MMU)
#ifdef TRAP_DBG_INTERRUPT