Commit 6e754210 authored by Al Viro's avatar Al Viro

mn10300: switch to generic kernel_execve()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 8f1597e9
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
############################################################################### ###############################################################################
.macro RESTORE_ALL .macro RESTORE_ALL
# peel back the stack to the calling frame # peel back the stack to the calling frame
# - this permits execve() to discard extra frames due to kernel syscalls # - we need that when returning from interrupts to kernel mode
GET_THREAD_INFO a0 GET_THREAD_INFO a0
mov (TI_frame,a0),fp mov (TI_frame,a0),fp
mov fp,sp mov fp,sp
......
...@@ -119,20 +119,13 @@ struct thread_struct { ...@@ -119,20 +119,13 @@ struct thread_struct {
/* /*
* do necessary setup to start up a newly executed thread * do necessary setup to start up a newly executed thread
* - need to discard the frame stacked by the kernel thread invoking the execve
* syscall (see RESTORE_ALL macro)
*/ */
static inline void start_thread(struct pt_regs *regs, static inline void start_thread(struct pt_regs *regs,
unsigned long new_pc, unsigned long new_sp) unsigned long new_pc, unsigned long new_sp)
{ {
struct thread_info *ti = current_thread_info(); regs->epsw = EPSW_nSL | EPSW_IE | EPSW_IM;
struct pt_regs *frame0; regs->pc = new_pc;
regs->sp = new_sp;
frame0 = thread_info_to_uregs(ti);
frame0->epsw = EPSW_nSL | EPSW_IE | EPSW_IM;
frame0->pc = new_pc;
frame0->sp = new_sp;
ti->frame = frame0;
} }
......
...@@ -383,6 +383,7 @@ ...@@ -383,6 +383,7 @@
#define __ARCH_WANT_SYS_RT_SIGACTION #define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND #define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE #define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_KERNEL_EXECVE
/* /*
* "Conditional" syscalls * "Conditional" syscalls
......
...@@ -8,7 +8,7 @@ fpu-obj-$(CONFIG_FPU) := fpu.o fpu-low.o ...@@ -8,7 +8,7 @@ fpu-obj-$(CONFIG_FPU) := fpu.o fpu-low.o
obj-y := process.o signal.o entry.o traps.o irq.o \ obj-y := process.o signal.o entry.o traps.o irq.o \
ptrace.o setup.o time.o sys_mn10300.o io.o \ ptrace.o setup.o time.o sys_mn10300.o io.o \
switch_to.o mn10300_ksyms.o kernel_execve.o $(fpu-obj-y) \ switch_to.o mn10300_ksyms.o $(fpu-obj-y) \
csrc-mn10300.o cevt-mn10300.o csrc-mn10300.o cevt-mn10300.o
obj-$(CONFIG_SMP) += smp.o smp-low.o obj-$(CONFIG_SMP) += smp.o smp-low.o
......
...@@ -62,6 +62,13 @@ ENTRY(ret_from_kernel_thread) ...@@ -62,6 +62,13 @@ ENTRY(ret_from_kernel_thread)
calls (a0) calls (a0)
jmp sys_exit jmp sys_exit
ENTRY(ret_from_kernel_execve)
add -12,d0 /* pt_regs -> frame */
mov d0,sp
GET_THREAD_INFO a2
clr d0
jmp syscall_exit
############################################################################### ###############################################################################
# #
# system call handler # system call handler
......
/* MN10300 In-kernel program execution
*
* Copyright (C) 2007 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 Licence
* as published by the Free Software Foundation; either version
* 2 of the Licence, 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: D0/D1/8(SP): arguments to function
# On return: D0: syscall return.
#
###############################################################################
.globl kernel_execve
.type kernel_execve,@function
kernel_execve:
mov a3,a1
mov d0,a0
mov (12,sp),a3
mov +__NR_execve,d0
syscall 0
mov a1,a3
rets
.size kernel_execve,.-kernel_execve
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment