]> git.hungrycats.org Git - linux/commitdiff
[ALPHA] Pass pt_regs as pointer to execve and sigprocmask syscalls.
authorRichard Henderson <rth@kanga.twiddle.home>
Thu, 15 Jul 2004 03:48:49 +0000 (20:48 -0700)
committerRichard Henderson <rth@kanga.twiddle.home>
Thu, 15 Jul 2004 03:48:49 +0000 (20:48 -0700)
arch/alpha/kernel/entry.S
arch/alpha/kernel/process.c
arch/alpha/kernel/signal.c

index be1731104449237e2c0e680d3034eeb8ea835044..f0927ee53f29c73b5491e692117e5dec2ee88d97 100644 (file)
@@ -924,6 +924,24 @@ sys_ptrace:
        jmp     $31, do_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
        .globl  alpha_ni_syscall
        .ent    alpha_ni_syscall
index c82286424aa24734e778c490a3c56838592b3760..681d509b6bcda27bc92a2e93c6a77f90efc99c14 100644 (file)
@@ -456,19 +456,10 @@ dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task)
 
 /*
  * 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
-sys_execve(char __user *ufilename, char __user * __user *argv,
-          char __user * __user *envp,
-          unsigned long a3, unsigned long a4, unsigned long a5,
-          struct pt_regs regs)
+do_sys_execve(char __user *ufilename, char __user * __user *argv,
+             char __user * __user *envp, struct pt_regs *regs)
 {
        int error;
        char *filename;
@@ -477,7 +468,7 @@ sys_execve(char __user *ufilename, char __user * __user *argv,
        error = PTR_ERR(filename);
        if (IS_ERR(filename))
                goto out;
-       error = do_execve(filename, argv, envp, &regs);
+       error = do_execve(filename, argv, envp, regs);
        putname(filename);
 out:
        return error;
index d908d77606f3c9360e8f4422b4fb8df591b33c2c..7703ac6d57a93eee3641769d6890ad717ca06bc2 100644 (file)
@@ -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.
  */
 asmlinkage unsigned long
-osf_sigprocmask(int how, unsigned long newmask, long a2, long a3,
-               long a4, long a5, struct pt_regs regs)
+do_osf_sigprocmask(int how, unsigned long newmask, struct pt_regs *regs)
 {
        unsigned long oldmask = -EINVAL;
 
@@ -78,7 +77,7 @@ osf_sigprocmask(int how, unsigned long newmask, long a2, long a3,
                recalc_sigpending();
                spin_unlock_irq(&current->sighand->siglock);
 
-               (&regs)->r0 = 0;                /* special no error return */
+               regs->r0 = 0;           /* special no error return */
        }
        return oldmask;
 }