Bug 13454

Summary: nd_syscall tapset needs to handle sys_pipe2 and pipe0/pipe1
Product: systemtap Reporter: Mark Wielaard <mark>
Component: tapsetsAssignee: Unassigned <systemtap>
Status: RESOLVED FIXED    
Severity: normal CC: dsmith
Priority: P2    
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:
Project(s) to access: ssh public key:
Bug Depends on: 11424    
Bug Blocks:    

Description Mark Wielaard 2011-11-29 19:23:13 UTC
tapset/nd_syscalls2.stp has:

# FIXME: needs to handle sys_pipe2
# FIXME: needs to support pipe0/pipe1
Comment 1 David Smith 2011-11-30 18:38:48 UTC
From syscalls2.stp:

----
# pipe _______________________________________________________                  
#                                                                               
# asmlinkage int                                                                
# sys_pipe(unsigned long __user * fildes)                                       
#                                                                               
# SYSCALL_DEFINE2(pipe2, int __user *, fildes, int, flags)                      
# pipe2() was added to Linux in version 2.6.27.                                 
probe syscall.pipe = kernel.function("sys_pipe2").call !,                       
                     kernel.function("sys_ia64_pipe").call ?,                   
                     kernel.function("sys_pipe").call                           
----

The reason why it is done this way is that in the kernel
sys_pipe is just a wrapper around sys_pipe2.  This way we
ignore the sys_pipe call, and only catch the sys_pipe2 call on
kernels with sys_pipe2.

Unfortunately, as bug #11424 notes, '!' (optional and sufficient) doesn't work
for kprobe.function probes.  So, the above logic will be difficult to duplicate
in tapset/nd_syscalls2.stp.
Comment 2 David Smith 2012-07-24 13:16:19 UTC
Now that bug #11424 and bug #14378 are fixed, this bug can be addressed.

Fixed in commit b1047bc.