[SPARC64]: Pass regs and entry/exit boolean to syscall_trace()

Also fix a bug in 32-bit syscall tracing.  We forgot to update
this code when we moved over to the convention that all 32-bit
syscall arguments are zero extended by default.

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2005-07-10 16:55:48 -07:00
parent bb49bcda15
commit 8d8a64796f
4 changed files with 17 additions and 10 deletions

View File

@ -1555,8 +1555,9 @@ sys_ptrace: add %sp, PTREGS_OFF, %o0
andcc %l5, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP), %g0 andcc %l5, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP), %g0
be,pt %icc, rtrap be,pt %icc, rtrap
clr %l6 clr %l6
add %sp, PTREGS_OFF, %o0
call syscall_trace call syscall_trace
nop mov 1, %o1
ba,pt %xcc, rtrap ba,pt %xcc, rtrap
clr %l6 clr %l6
@ -1640,18 +1641,20 @@ linux_sparc_ni_syscall:
or %l7, %lo(sys_ni_syscall), %l7 or %l7, %lo(sys_ni_syscall), %l7
linux_syscall_trace32: linux_syscall_trace32:
add %sp, PTREGS_OFF, %o0
call syscall_trace call syscall_trace
nop clr %o1
srl %i0, 0, %o0 srl %i0, 0, %o0
mov %i4, %o4 srl %i4, 0, %o4
srl %i1, 0, %o1 srl %i1, 0, %o1
srl %i2, 0, %o2 srl %i2, 0, %o2
b,pt %xcc, 2f b,pt %xcc, 2f
srl %i3, 0, %o3 srl %i3, 0, %o3
linux_syscall_trace: linux_syscall_trace:
add %sp, PTREGS_OFF, %o0
call syscall_trace call syscall_trace
nop clr %o1
mov %i0, %o0 mov %i0, %o0
mov %i1, %o1 mov %i1, %o1
mov %i2, %o2 mov %i2, %o2
@ -1755,8 +1758,9 @@ ret_sys_call:
b,pt %xcc, rtrap b,pt %xcc, rtrap
stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC] stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]
linux_syscall_trace2: linux_syscall_trace2:
add %sp, PTREGS_OFF, %o0
call syscall_trace call syscall_trace
nop mov 1, %o1
stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC] stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]
ba,pt %xcc, rtrap ba,pt %xcc, rtrap
stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC] stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]

View File

@ -628,10 +628,10 @@ out:
unlock_kernel(); unlock_kernel();
} }
asmlinkage void syscall_trace(void) asmlinkage void syscall_trace(struct pt_regs *regs, int syscall_exit_p)
{ {
/* do the secure computing check first */ /* do the secure computing check first */
secure_computing(current_thread_info()->kregs->u_regs[UREG_G1]); secure_computing(regs->u_regs[UREG_G1]);
if (!test_thread_flag(TIF_SYSCALL_TRACE)) if (!test_thread_flag(TIF_SYSCALL_TRACE))
return; return;

View File

@ -79,7 +79,7 @@ extern void linux_sparc_syscall(void);
extern void rtrap(void); extern void rtrap(void);
extern void show_regs(struct pt_regs *); extern void show_regs(struct pt_regs *);
extern void solaris_syscall(void); extern void solaris_syscall(void);
extern void syscall_trace(void); extern void syscall_trace(struct pt_regs *, int);
extern u32 sunos_sys_table[], sys_call_table32[]; extern u32 sunos_sys_table[], sys_call_table32[];
extern void tl0_solaris(void); extern void tl0_solaris(void);
extern void sys_sigsuspend(void); extern void sys_sigsuspend(void);

View File

@ -24,8 +24,9 @@
.text .text
solaris_syscall_trace: solaris_syscall_trace:
add %sp, PTREGS_OFF, %o0
call syscall_trace call syscall_trace
nop mov 0, %o1
srl %i0, 0, %o0 srl %i0, 0, %o0
mov %i4, %o4 mov %i4, %o4
srl %i1, 0, %o1 srl %i1, 0, %o1
@ -159,7 +160,9 @@ ret_from_solaris:
stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC] !npc = npc+4 stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC] !npc = npc+4
solaris_syscall_trace2: solaris_syscall_trace2:
add %sp, PTREGS_OFF, %o0
call syscall_trace call syscall_trace
mov 1, %o1
add %l1, 0x4, %l2 /* npc = npc+4 */ add %l1, 0x4, %l2 /* npc = npc+4 */
andcc %l1, 1, %g0 andcc %l1, 1, %g0
bne,pn %icc, 2b bne,pn %icc, 2b