aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68knommu/kernel/sys_m68k.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/m68knommu/kernel/sys_m68k.c')
-rw-r--r--arch/m68knommu/kernel/sys_m68k.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/m68knommu/kernel/sys_m68k.c b/arch/m68knommu/kernel/sys_m68k.c
index d87e1e0a133..c3494b8447d 100644
--- a/arch/m68knommu/kernel/sys_m68k.c
+++ b/arch/m68knommu/kernel/sys_m68k.c
@@ -26,6 +26,7 @@
26#include <asm/traps.h> 26#include <asm/traps.h>
27#include <asm/ipc.h> 27#include <asm/ipc.h>
28#include <asm/cacheflush.h> 28#include <asm/cacheflush.h>
29#include <asm/unistd.h>
29 30
30/* 31/*
31 * sys_pipe() is the normal C calling standard for creating 32 * sys_pipe() is the normal C calling standard for creating
@@ -206,3 +207,17 @@ asmlinkage int sys_getpagesize(void)
206 return PAGE_SIZE; 207 return PAGE_SIZE;
207} 208}
208 209
210/*
211 * Do a system call from kernel instead of calling sys_execve so we
212 * end up with proper pt_regs.
213 */
214int kernel_execve(const char *filename, char *const argv[], char *const envp[])
215{
216 register long __res asm ("%d0") = __NR_execve;
217 register long __a asm ("%d1") = (long)(filename);
218 register long __b asm ("%d2") = (long)(argv);
219 register long __c asm ("%d3") = (long)(envp);
220 asm volatile ("trap #0" : "+d" (__res)
221 : "d" (__a), "d" (__b), "d" (__c));
222 return __res;
223}