frv: switch to generic kernel_execve
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 19 Sep 2012 02:33:44 +0000 (22:33 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 1 Oct 2012 04:53:11 +0000 (00:53 -0400)
Acked-by: David Howells <dhowells@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/frv/include/asm/processor.h
arch/frv/include/asm/unistd.h
arch/frv/kernel/Makefile
arch/frv/kernel/entry.S
arch/frv/kernel/kernel_execve.S [deleted file]

index dccb9d1..cc86e07 100644 (file)
@@ -92,14 +92,12 @@ extern struct task_struct *__kernel_current_task;
 
 /*
  * do necessary setup to start up a newly executed thread.
- * - need to discard the frame stacked by init() invoking the execve syscall
  */
 #define start_thread(_regs, _pc, _usp)                 \
 do {                                                   \
-       __frame = __kernel_frame0_ptr;                  \
-       __frame->pc     = (_pc);                        \
-       __frame->psr    &= ~PSR_S;                      \
-       __frame->sp     = (_usp);                       \
+       _regs->pc       = (_pc);                        \
+       _regs->psr      &= ~PSR_S;                      \
+       _regs->sp       = (_usp);                       \
 } while(0)
 
 /* Free all resources held by a thread. */
index 24b6403..b6b07e5 100644 (file)
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_SYS_EXECVE
+#define __ARCH_WANT_KERNEL_EXECVE
 
 /*
  * "Conditional" syscalls
index 7b10bc1..3cbb329 100644 (file)
@@ -8,7 +8,7 @@ heads-$(CONFIG_MMU)             := head-mmu-fr451.o
 extra-y:= head.o vmlinux.lds
 
 obj-y := $(heads-y) entry.o entry-table.o break.o switch_to.o \
-        kernel_execve.o process.o traps.o ptrace.o signal.o dma.o \
+        process.o traps.o ptrace.o signal.o dma.o \
         sys_frv.o time.o setup.o frv_ksyms.o \
         debug-stub.o irq.o sleep.o uaccess.o
 
index 7a88613..0027329 100644 (file)
@@ -871,6 +871,11 @@ ret_from_kernel_thread:
        calll           @(gr21,gr0)
        bra             sys_exit
 
+       .globl          ret_from_kernel_execve
+ret_from_kernel_execve:
+       ori             gr28,0,sp
+       bra             __syscall_exit
+
 ###################################################################################################
 #
 # Return to user mode is not as complex as all this looks,
diff --git a/arch/frv/kernel/kernel_execve.S b/arch/frv/kernel/kernel_execve.S
deleted file mode 100644 (file)
index 9b074a1..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* in-kernel program execution
- *
- * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
- * Written by David Howells (dhowells@redhat.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- */
-
-#include <linux/linkage.h>
-#include <asm/unistd.h>
-
-###############################################################################
-#
-# Do a system call from kernel instead of calling sys_execve so we end up with
-# proper pt_regs.
-#
-# int kernel_execve(const char *filename, char *const argv[], char *const envp[])
-#
-# On entry: GR8/GR9/GR10: arguments to function
-# On return: GR8: syscall return.
-#
-###############################################################################
-       .globl          kernel_execve
-       .type           kernel_execve,@function
-kernel_execve:
-       setlos          __NR_execve,gr7
-       tira            gr0,#0
-       bralr
-
-       .size           kernel_execve,.-kernel_execve