Commit 76d41460 authored by Richard Henderson's avatar Richard Henderson

[ALPHA] Pass pt_regs as pointer to execve and sigprocmask syscalls.

parent 9fdca734
...@@ -924,6 +924,24 @@ sys_ptrace: ...@@ -924,6 +924,24 @@ sys_ptrace:
jmp $31, do_sys_ptrace jmp $31, do_sys_ptrace
.end sys_ptrace .end sys_ptrace
.align 4
.globl sys_execve
.ent sys_execve
sys_execve:
.prologue 0
mov $sp, $19
jmp $31, do_sys_execve
.end sys_execve
.align 4
.globl osf_sigprocmask
.ent osf_sigprocmask
osf_sigprocmask:
.prologue 0
mov $sp, $18
jmp $31, do_osf_sigprocmask
.end osf_sigprocmask
.align 4 .align 4
.globl alpha_ni_syscall .globl alpha_ni_syscall
.ent alpha_ni_syscall .ent alpha_ni_syscall
......
...@@ -456,19 +456,10 @@ dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task) ...@@ -456,19 +456,10 @@ dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task)
/* /*
* sys_execve() executes a new program. * sys_execve() executes a new program.
*
* This works due to the alpha calling sequence: the first 6 args
* are gotten from registers, while the rest is on the stack, so
* we get a0-a5 for free, and then magically find "struct pt_regs"
* on the stack for us..
*
* Don't do this at home.
*/ */
asmlinkage int asmlinkage int
sys_execve(char __user *ufilename, char __user * __user *argv, do_sys_execve(char __user *ufilename, char __user * __user *argv,
char __user * __user *envp, char __user * __user *envp, struct pt_regs *regs)
unsigned long a3, unsigned long a4, unsigned long a5,
struct pt_regs regs)
{ {
int error; int error;
char *filename; char *filename;
...@@ -477,7 +468,7 @@ sys_execve(char __user *ufilename, char __user * __user *argv, ...@@ -477,7 +468,7 @@ sys_execve(char __user *ufilename, char __user * __user *argv,
error = PTR_ERR(filename); error = PTR_ERR(filename);
if (IS_ERR(filename)) if (IS_ERR(filename))
goto out; goto out;
error = do_execve(filename, argv, envp, &regs); error = do_execve(filename, argv, envp, regs);
putname(filename); putname(filename);
out: out:
return error; return error;
......
...@@ -53,8 +53,7 @@ static int do_signal(sigset_t *, struct pt_regs *, struct switch_stack *, ...@@ -53,8 +53,7 @@ static int do_signal(sigset_t *, struct pt_regs *, struct switch_stack *,
* operation, as all of this is local to this thread. * operation, as all of this is local to this thread.
*/ */
asmlinkage unsigned long asmlinkage unsigned long
osf_sigprocmask(int how, unsigned long newmask, long a2, long a3, do_osf_sigprocmask(int how, unsigned long newmask, struct pt_regs *regs)
long a4, long a5, struct pt_regs regs)
{ {
unsigned long oldmask = -EINVAL; unsigned long oldmask = -EINVAL;
...@@ -78,7 +77,7 @@ osf_sigprocmask(int how, unsigned long newmask, long a2, long a3, ...@@ -78,7 +77,7 @@ osf_sigprocmask(int how, unsigned long newmask, long a2, long a3,
recalc_sigpending(); recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock); spin_unlock_irq(&current->sighand->siglock);
(&regs)->r0 = 0; /* special no error return */ regs->r0 = 0; /* special no error return */
} }
return oldmask; return oldmask;
} }
......
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