Message ID | 20121203.143049.901444782954231849.davem@davemloft.net |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
On Mon, Dec 03, 2012 at 02:30:49PM -0500, David Miller wrote: > > Reported-by: Al Viro <viro@ZenIV.linux.org.uk> > Signed-off-by: David S. Miller <davem@davemloft.net> > --- > arch/sparc/kernel/sys32.S | 2 +- > arch/sparc/kernel/syscalls.S | 14 ++++++++++++-- > arch/sparc/kernel/systbls_64.S | 2 +- > 3 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/arch/sparc/kernel/sys32.S b/arch/sparc/kernel/sys32.S > index 44025f4..8475a47 100644 > --- a/arch/sparc/kernel/sys32.S > +++ b/arch/sparc/kernel/sys32.S > @@ -47,7 +47,7 @@ STUB: sra REG1, 0, REG1; \ > sra REG4, 0, REG4 > > SIGN1(sys32_exit, sparc_exit, %o0) > -SIGN1(sys32_exit_group, sys_exit_group, %o0) > +SIGN1(sys32_exit_group, sparc_exit_group, %o0) No need of that part, really. sys_exit_group() will have its argument (int) normalized all by itself. The same goes for sys_exit(), so sys32_exit is also pointless; just have sparc_exit/sparc_exit_group in 32bit syscall table, same as you do in 64bit one... -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Al Viro <viro@ZenIV.linux.org.uk> Date: Mon, 3 Dec 2012 19:35:58 +0000 > On Mon, Dec 03, 2012 at 02:30:49PM -0500, David Miller wrote: >> >> Reported-by: Al Viro <viro@ZenIV.linux.org.uk> >> Signed-off-by: David S. Miller <davem@davemloft.net> >> --- >> arch/sparc/kernel/sys32.S | 2 +- >> arch/sparc/kernel/syscalls.S | 14 ++++++++++++-- >> arch/sparc/kernel/systbls_64.S | 2 +- >> 3 files changed, 14 insertions(+), 4 deletions(-) >> >> diff --git a/arch/sparc/kernel/sys32.S b/arch/sparc/kernel/sys32.S >> index 44025f4..8475a47 100644 >> --- a/arch/sparc/kernel/sys32.S >> +++ b/arch/sparc/kernel/sys32.S >> @@ -47,7 +47,7 @@ STUB: sra REG1, 0, REG1; \ >> sra REG4, 0, REG4 >> >> SIGN1(sys32_exit, sparc_exit, %o0) >> -SIGN1(sys32_exit_group, sys_exit_group, %o0) >> +SIGN1(sys32_exit_group, sparc_exit_group, %o0) > > No need of that part, really. sys_exit_group() will have its argument > (int) normalized all by itself. The same goes for sys_exit(), so > sys32_exit is also pointless; just have sparc_exit/sparc_exit_group in > 32bit syscall table, same as you do in 64bit one... As we've discussed in other thread, much of sys32.S is irrelevant. I'll try to find some time to audit the whole file and take care of all of the extraneous cases in the sparc-next tree. Thanks. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/sparc/kernel/sys32.S b/arch/sparc/kernel/sys32.S index 44025f4..8475a47 100644 --- a/arch/sparc/kernel/sys32.S +++ b/arch/sparc/kernel/sys32.S @@ -47,7 +47,7 @@ STUB: sra REG1, 0, REG1; \ sra REG4, 0, REG4 SIGN1(sys32_exit, sparc_exit, %o0) -SIGN1(sys32_exit_group, sys_exit_group, %o0) +SIGN1(sys32_exit_group, sparc_exit_group, %o0) SIGN1(sys32_wait4, compat_sys_wait4, %o2) SIGN1(sys32_creat, sys_creat, %o1) SIGN1(sys32_mknod, sys_mknod, %o1) diff --git a/arch/sparc/kernel/syscalls.S b/arch/sparc/kernel/syscalls.S index 7f5f65d..bf23477 100644 --- a/arch/sparc/kernel/syscalls.S +++ b/arch/sparc/kernel/syscalls.S @@ -118,10 +118,20 @@ ret_from_syscall: ba,pt %xcc, ret_sys_call ldx [%sp + PTREGS_OFF + PT_V9_I0], %o0 + .globl sparc_exit_group + .type sparc_exit_group,#function +sparc_exit_group: + sethi %hi(sys_exit_group), %g7 + ba,pt %xcc, 1f + or %g7, %lo(sys_exit_group), %g7 + .size sparc_exit_group,.-sparc_exit_group + .globl sparc_exit .type sparc_exit,#function sparc_exit: - rdpr %pstate, %g2 + sethi %hi(sys_exit), %g7 + or %g7, %lo(sys_exit), %g7 +1: rdpr %pstate, %g2 wrpr %g2, PSTATE_IE, %pstate rdpr %otherwin, %g1 rdpr %cansave, %g3 @@ -129,7 +139,7 @@ sparc_exit: wrpr %g3, 0x0, %cansave wrpr %g0, 0x0, %otherwin wrpr %g2, 0x0, %pstate - ba,pt %xcc, sys_exit + jmpl %g7, %g0 stb %g0, [%g6 + TI_WSAVED] .size sparc_exit,.-sparc_exit diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S index 1c9af9f..017b74a 100644 --- a/arch/sparc/kernel/systbls_64.S +++ b/arch/sparc/kernel/systbls_64.S @@ -133,7 +133,7 @@ sys_call_table: /*170*/ .word sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys_getdents .word sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr /*180*/ .word sys_flistxattr, sys_removexattr, sys_lremovexattr, sys_nis_syscall, sys_ni_syscall - .word sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sys_newuname + .word sys_setpgid, sys_fremovexattr, sys_tkill, sparc_exit_group, sys_newuname /*190*/ .word sys_init_module, sys_sparc64_personality, sys_remap_file_pages, sys_epoll_create, sys_epoll_ctl .word sys_epoll_wait, sys_ioprio_set, sys_getppid, sys_nis_syscall, sys_sgetmask /*200*/ .word sys_ssetmask, sys_nis_syscall, sys_newlstat, sys_uselib, sys_nis_syscall
Reported-by: Al Viro <viro@ZenIV.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net> --- arch/sparc/kernel/sys32.S | 2 +- arch/sparc/kernel/syscalls.S | 14 ++++++++++++-- arch/sparc/kernel/systbls_64.S | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-)