Blackfin: check for bad syscalls after tracing it

We want to report all system calls (even invalid ones) to the tracing
layers, so check the NR only after we've notified.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger 2010-02-12 07:24:34 +00:00
parent 600482c13d
commit 9e228ee9ea

View File

@ -626,13 +626,6 @@ ENTRY(_system_call)
p0 = [sp + PT_ORIG_P0]; p0 = [sp + PT_ORIG_P0];
#endif /* CONFIG_IPIPE */ #endif /* CONFIG_IPIPE */
/* Check the System Call */
r7 = __NR_syscall;
/* System call number is passed in P0 */
r6 = p0;
cc = r6 < r7;
if ! cc jump .Lbadsys;
/* are we tracing syscalls?*/ /* are we tracing syscalls?*/
r7 = sp; r7 = sp;
r6.l = lo(ALIGN_PAGE_MASK); r6.l = lo(ALIGN_PAGE_MASK);
@ -645,6 +638,12 @@ ENTRY(_system_call)
CC = BITTST(r7,TIF_SINGLESTEP); CC = BITTST(r7,TIF_SINGLESTEP);
if CC JUMP _sys_trace; if CC JUMP _sys_trace;
/* Make sure the system call # is valid */
p4 = __NR_syscall;
/* System call number is passed in P0 */
cc = p4 <= p0;
if cc jump .Lbadsys;
/* Execute the appropriate system call */ /* Execute the appropriate system call */
p4 = p0; p4 = p0;
@ -741,9 +740,14 @@ _sys_trace:
r0 = sp; r0 = sp;
pseudo_long_call _syscall_trace_enter, p5; pseudo_long_call _syscall_trace_enter, p5;
/* Execute the appropriate system call */ /* Make sure the system call # is valid */
p4 = [SP + PT_P0]; p4 = [SP + PT_P0];
p3 = __NR_syscall;
cc = p3 <= p4;
r0 = -ENOSYS;
if cc jump .Lsys_trace_badsys;
/* Execute the appropriate system call */
p5.l = _sys_call_table; p5.l = _sys_call_table;
p5.h = _sys_call_table; p5.h = _sys_call_table;
p5 = p5 + (p4 << 2); p5 = p5 + (p4 << 2);
@ -761,6 +765,7 @@ _sys_trace:
SP += -12; SP += -12;
call (p5); call (p5);
SP += 24; SP += 24;
.Lsys_trace_badsys:
[sp + PT_R0] = r0; [sp + PT_R0] = r0;
r0 = sp; r0 = sp;