[S390] fix system call parameter functions.
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 27 Nov 2008 10:05:55 +0000 (11:05 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 27 Nov 2008 10:06:56 +0000 (11:06 +0100)
commit59da21398e680e8100625d689c8bebee6a139e93
tree7d93f87d2942dac06367af8b3a269e9f6d557b29
parented313489badef16d700f5a3be50e8fd8f8294bc8
[S390] fix system call parameter functions.

syscall_get_nr() currently returns a valid result only if the call
chain of the traced process includes do_syscall_trace_enter(). But
collect_syscall() can be called for any sleeping task, the result of
syscall_get_nr() in general is completely bogus.

To make syscall_get_nr() work for any sleeping task the traps field
in pt_regs is replace with svcnr - the system call number the process
is executing. If svcnr == 0 the process is not on a system call path.

The syscall_get_arguments and syscall_set_arguments use regs->gprs[2]
for the first system call parameter. This is incorrect since gprs[2]
may have been overwritten with the system call number if the call
chain includes do_syscall_trace_enter. Use regs->orig_gprs2 instead.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/ptrace.h
arch/s390/include/asm/syscall.h
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/compat_signal.c
arch/s390/kernel/entry.S
arch/s390/kernel/entry64.S
arch/s390/kernel/ptrace.c
arch/s390/kernel/signal.c