diff options
-rw-r--r-- | arch/ia64/include/asm/unistd.h | 1 | ||||
-rw-r--r-- | arch/ia64/kernel/entry.S | 4 | ||||
-rw-r--r-- | arch/ia64/kernel/process.c | 19 |
3 files changed, 2 insertions, 22 deletions
diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h index 8b3ff2f5b861..1574bca86138 100644 --- a/arch/ia64/include/asm/unistd.h +++ b/arch/ia64/include/asm/unistd.h | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | #define __ARCH_WANT_SYS_RT_SIGACTION | 30 | #define __ARCH_WANT_SYS_RT_SIGACTION |
31 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 31 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
32 | #define __ARCH_WANT_SYS_EXECVE | ||
32 | 33 | ||
33 | #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER) | 34 | #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER) |
34 | 35 | ||
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S index 0dea684e1905..940a67263629 100644 --- a/arch/ia64/kernel/entry.S +++ b/arch/ia64/kernel/entry.S | |||
@@ -61,14 +61,13 @@ ENTRY(ia64_execve) | |||
61 | * Allocate 8 input registers since ptrace() may clobber them | 61 | * Allocate 8 input registers since ptrace() may clobber them |
62 | */ | 62 | */ |
63 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8) | 63 | .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8) |
64 | alloc loc1=ar.pfs,8,2,4,0 | 64 | alloc loc1=ar.pfs,8,2,3,0 |
65 | mov loc0=rp | 65 | mov loc0=rp |
66 | .body | 66 | .body |
67 | mov out0=in0 // filename | 67 | mov out0=in0 // filename |
68 | ;; // stop bit between alloc and call | 68 | ;; // stop bit between alloc and call |
69 | mov out1=in1 // argv | 69 | mov out1=in1 // argv |
70 | mov out2=in2 // envp | 70 | mov out2=in2 // envp |
71 | add out3=16,sp // regs | ||
72 | br.call.sptk.many rp=sys_execve | 71 | br.call.sptk.many rp=sys_execve |
73 | .ret0: | 72 | .ret0: |
74 | cmp4.ge p6,p7=r8,r0 | 73 | cmp4.ge p6,p7=r8,r0 |
@@ -76,7 +75,6 @@ ENTRY(ia64_execve) | |||
76 | sxt4 r8=r8 // return 64-bit result | 75 | sxt4 r8=r8 // return 64-bit result |
77 | ;; | 76 | ;; |
78 | stf.spill [sp]=f0 | 77 | stf.spill [sp]=f0 |
79 | (p6) cmp.ne pKStk,pUStk=r0,r0 // a successful execve() lands us in user-mode... | ||
80 | mov rp=loc0 | 78 | mov rp=loc0 |
81 | (p6) mov ar.pfs=r0 // clear ar.pfs on success | 79 | (p6) mov ar.pfs=r0 // clear ar.pfs on success |
82 | (p7) br.ret.sptk.many rp | 80 | (p7) br.ret.sptk.many rp |
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 37686dbfd264..25543a295ad9 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -617,25 +617,6 @@ dump_fpu (struct pt_regs *pt, elf_fpregset_t dst) | |||
617 | return 1; /* f0-f31 are always valid so we always return 1 */ | 617 | return 1; /* f0-f31 are always valid so we always return 1 */ |
618 | } | 618 | } |
619 | 619 | ||
620 | long | ||
621 | sys_execve (const char __user *filename, | ||
622 | const char __user *const __user *argv, | ||
623 | const char __user *const __user *envp, | ||
624 | struct pt_regs *regs) | ||
625 | { | ||
626 | struct filename *fname; | ||
627 | int error; | ||
628 | |||
629 | fname = getname(filename); | ||
630 | error = PTR_ERR(fname); | ||
631 | if (IS_ERR(fname)) | ||
632 | goto out; | ||
633 | error = do_execve(fname->name, argv, envp, regs); | ||
634 | putname(fname); | ||
635 | out: | ||
636 | return error; | ||
637 | } | ||
638 | |||
639 | /* | 620 | /* |
640 | * Flush thread state. This is called when a thread does an execve(). | 621 | * Flush thread state. This is called when a thread does an execve(). |
641 | */ | 622 | */ |