Bug 11763

Summary: on s390x, nd_syscall probes that use $arg6 fail
Product: systemtap Reporter: David Smith <dsmith>
Component: tapsetsAssignee: Unassigned <systemtap>
Status: RESOLVED FIXED    
Severity: normal CC: mark
Priority: P2    
Version: unspecified   
Target Milestone: ---   
Host: s390x Target:
Build: Last reconfirmed:

Description David Smith 2010-06-28 20:04:23 UTC
In tapsets/s390x/registers.stp, the function _stp_arg() has this comment before it:

/*
 * Return the value of function arg #argnum (1=first arg).
 ...
 * We don't yet support extracting arg #6 and beyond, which are passed
 * on stack
 */

Since the s390x doesn't support extracting arg6 (or greater), this means that
the following nd_syscall probes fail:

nd_syscall.epoll_pwait *
nd_syscall.fork
nd_syscall.futex
nd_syscall.compat_futex
nd_syscall.mbind *
nd_syscall.move_pages *
nd_syscall.pselect6
nd_syscall.compat_pselect6
nd_syscall.pselect7
nd_syscall.compat_pselect7a
nd_syscall.recvfrom
nd_syscall.sendto
nd_syscall.splice

Note that the optional probes marked with '*' don't actually exist on RHEL5
s390x (kernel 2.6.18-194.el5), but might exist in newer kernels.

When the nd_syscalls.exp testcase is run, errors like the following will be seen:

ERROR: Cannot access arg(6)
Comment 1 David Smith 2012-04-19 15:25:17 UTC
*** Bug 13377 has been marked as a duplicate of this bug. ***
Comment 2 David Smith 2012-04-23 19:30:47 UTC
Fixed in commit f861d05.  The s390x _stp_arg() function now uses syscall_get_arguments().

On RHEL5, nd_syscall.exp goes from 44 FAILs to 0 FAILs, 6 KPASS.

On RHEL6, nd_syscall.exp goes from 7 FAILs to 0 FAILs.