Commit 5fae1b66 authored by Al Viro's avatar Al Viro
Browse files

h8300: generic kernel_execve()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 557e1995
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ config H8300
	select GENERIC_CPU_DEVICES
	select MODULES_USE_ELF_RELA
	select GENERIC_KERNEL_THREAD
	select GENERIC_KERNEL_EXECVE

config SYMBOL_PREFIX
	string
+1 −2
Original line number Diff line number Diff line
@@ -337,8 +337,7 @@ SYMBOL_NAME_LABEL(ret_from_kernel_thread)
	mov.l	@(LER4:16,sp),er0
	mov.l	@(LER5:16,sp),er1
	jsr	@er1
	sub.l	@er0,@er0
	jsr	@SYMBOL_NAME(sys_exit)
	jmp	@SYMBOL_NAME(ret_from_exception)

SYMBOL_NAME_LABEL(resume)
	/*
+0 −26
Original line number Diff line number Diff line
@@ -46,29 +46,3 @@ asmlinkage void syscall_print(void *dummy,...)
               ((regs->pc)&0xffffff)-2,regs->orig_er0,regs->er1,regs->er2,regs->er3,regs->er0);
}
#endif

/*
 * Do a system call from kernel instead of calling sys_execve so we
 * end up with proper pt_regs.
 */
asmlinkage
int kernel_execve(const char *filename,
		  const char *const argv[],
		  const char *const envp[])
{
	register long res __asm__("er0");
	register const char *const *_c __asm__("er3") = envp;
	register const char *const *_b __asm__("er2") = argv;
	register const char * _a __asm__("er1") = filename;
	__asm__ __volatile__ ("mov.l %1,er0\n\t"
			"trapa	#0\n\t"
			: "=r" (res)
			: "g" (__NR_execve),
			  "g" (_a),
			  "g" (_b),
			  "g" (_c)
			: "cc", "memory");
	return res;
}