| Summary: | nd_syscall tapset needs to handle sys_pipe2 and pipe0/pipe1 | ||
|---|---|---|---|
| Product: | systemtap | Reporter: | Mark Wielaard <mark> |
| Component: | tapsets | Assignee: | 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
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.
Now that bug #11424 and bug #14378 are fixed, this bug can be addressed. Fixed in commit b1047bc. |