tile: switch to generic sys_execve()
Acked-by: Chris Metcalf <cmetcalf@tilera.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
0f8b983812
Коммит
530550651f
|
@ -148,6 +148,7 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
|
||||||
#define compat_start_thread(regs, ip, usp) do { \
|
#define compat_start_thread(regs, ip, usp) do { \
|
||||||
regs->pc = ptr_to_compat_reg((void *)(ip)); \
|
regs->pc = ptr_to_compat_reg((void *)(ip)); \
|
||||||
regs->sp = ptr_to_compat_reg((void *)(usp)); \
|
regs->sp = ptr_to_compat_reg((void *)(usp)); \
|
||||||
|
single_step_execve(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -211,6 +211,7 @@ static inline void start_thread(struct pt_regs *regs,
|
||||||
{
|
{
|
||||||
regs->pc = pc;
|
regs->pc = pc;
|
||||||
regs->sp = usp;
|
regs->sp = usp;
|
||||||
|
single_step_execve();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free all resources held by a thread. */
|
/* Free all resources held by a thread. */
|
||||||
|
|
|
@ -68,9 +68,10 @@ long _sys_sigaltstack(const stack_t __user *, stack_t __user *);
|
||||||
long _sys_rt_sigreturn(void);
|
long _sys_rt_sigreturn(void);
|
||||||
long _sys_clone(unsigned long clone_flags, unsigned long newsp,
|
long _sys_clone(unsigned long clone_flags, unsigned long newsp,
|
||||||
void __user *parent_tid, void __user *child_tid);
|
void __user *parent_tid, void __user *child_tid);
|
||||||
long _sys_execve(const char __user *filename,
|
long sys_execve(const char __user *filename,
|
||||||
const char __user *const __user *argv,
|
const char __user *const __user *argv,
|
||||||
const char __user *const __user *envp);
|
const char __user *const __user *envp);
|
||||||
|
#define sys_execve sys_execve
|
||||||
|
|
||||||
#include <asm-generic/syscalls.h>
|
#include <asm-generic/syscalls.h>
|
||||||
|
|
||||||
|
|
|
@ -16,4 +16,5 @@
|
||||||
#define __ARCH_WANT_SYS_LLSEEK
|
#define __ARCH_WANT_SYS_LLSEEK
|
||||||
#endif
|
#endif
|
||||||
#define __ARCH_WANT_SYS_NEWFSTATAT
|
#define __ARCH_WANT_SYS_NEWFSTATAT
|
||||||
|
#define __ARCH_WANT_SYS_EXECVE
|
||||||
#include <uapi/asm/unistd.h>
|
#include <uapi/asm/unistd.h>
|
||||||
|
|
|
@ -1476,7 +1476,6 @@ STD_ENTRY_LOCAL(bad_intr)
|
||||||
}; \
|
}; \
|
||||||
STD_ENDPROC(_##x)
|
STD_ENDPROC(_##x)
|
||||||
|
|
||||||
PTREGS_SYSCALL(sys_execve, r3)
|
|
||||||
PTREGS_SYSCALL(sys_sigaltstack, r2)
|
PTREGS_SYSCALL(sys_sigaltstack, r2)
|
||||||
PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0)
|
PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0)
|
||||||
PTREGS_SYSCALL(sys_cmpxchg_badaddr, r1)
|
PTREGS_SYSCALL(sys_cmpxchg_badaddr, r1)
|
||||||
|
|
|
@ -1205,7 +1205,6 @@ STD_ENTRY_LOCAL(bad_intr)
|
||||||
}; \
|
}; \
|
||||||
STD_ENDPROC(_##x)
|
STD_ENDPROC(_##x)
|
||||||
|
|
||||||
PTREGS_SYSCALL(sys_execve, r3)
|
|
||||||
PTREGS_SYSCALL(sys_sigaltstack, r2)
|
PTREGS_SYSCALL(sys_sigaltstack, r2)
|
||||||
PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0)
|
PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0)
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
|
|
|
@ -594,51 +594,6 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
|
||||||
parent_tidptr, child_tidptr);
|
parent_tidptr, child_tidptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* sys_execve() executes a new program.
|
|
||||||
*/
|
|
||||||
SYSCALL_DEFINE4(execve, const char __user *, path,
|
|
||||||
const char __user *const __user *, argv,
|
|
||||||
const char __user *const __user *, envp,
|
|
||||||
struct pt_regs *, regs)
|
|
||||||
{
|
|
||||||
long error;
|
|
||||||
struct filename *filename;
|
|
||||||
|
|
||||||
filename = getname(path);
|
|
||||||
error = PTR_ERR(filename);
|
|
||||||
if (IS_ERR(filename))
|
|
||||||
goto out;
|
|
||||||
error = do_execve(filename->name, argv, envp, regs);
|
|
||||||
putname(filename);
|
|
||||||
if (error == 0)
|
|
||||||
single_step_execve();
|
|
||||||
out:
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
|
||||||
long compat_sys_execve(const char __user *path,
|
|
||||||
compat_uptr_t __user *argv,
|
|
||||||
compat_uptr_t __user *envp)
|
|
||||||
{
|
|
||||||
long error;
|
|
||||||
struct filename *filename;
|
|
||||||
|
|
||||||
filename = getname(path);
|
|
||||||
error = PTR_ERR(filename);
|
|
||||||
if (IS_ERR(filename))
|
|
||||||
goto out;
|
|
||||||
error = compat_do_execve(filename->name, argv, envp,
|
|
||||||
current_pt_regs());
|
|
||||||
putname(filename);
|
|
||||||
if (error == 0)
|
|
||||||
single_step_execve();
|
|
||||||
out:
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p)
|
unsigned long get_wchan(struct task_struct *p)
|
||||||
{
|
{
|
||||||
struct KBacktraceIterator kbt;
|
struct KBacktraceIterator kbt;
|
||||||
|
|
|
@ -107,7 +107,6 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Call the trampolines to manage pt_regs where necessary. */
|
/* Call the trampolines to manage pt_regs where necessary. */
|
||||||
#define sys_execve _sys_execve
|
|
||||||
#define sys_sigaltstack _sys_sigaltstack
|
#define sys_sigaltstack _sys_sigaltstack
|
||||||
#define sys_rt_sigreturn _sys_rt_sigreturn
|
#define sys_rt_sigreturn _sys_rt_sigreturn
|
||||||
#define sys_clone _sys_clone
|
#define sys_clone _sys_clone
|
||||||
|
|
Загрузка…
Ссылка в новой задаче