diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-14 15:53:04 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-19 14:28:40 -0400 |
| commit | 71b4ecc3d8056b2ed5cbc0d77af13fed38bcac49 (patch) | |
| tree | f0d90a94eeda0ff445637fd70c61ad3484adc0c6 /arch/ia64/kernel | |
| parent | 54d496c3915a10b5e46c5dd9de1a6d301ceb32bd (diff) | |
ia64: switch to generic sys_execve()
Acked-by: Tony Luck <tony.luck@intel.com>
Tested-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/ia64/kernel')
| -rw-r--r-- | arch/ia64/kernel/entry.S | 4 | ||||
| -rw-r--r-- | arch/ia64/kernel/process.c | 19 |
2 files changed, 1 insertions, 22 deletions
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S index 0dea684e190..940a6726362 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 37686dbfd26..25543a295ad 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 | */ |
