This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Matching function parameters and corresponding return value


On Wed, 2006-06-14 at 07:16 +0800, Li Guanglei wrote:
> Sylvain Fourmanoit ??:
> > Hi all,
> > 
> > I would like to watch calls to a preemptible function such as sys_open():
> > ideally, I would like to know both the tentatively accessed files and 
> > the success (or not) of the various calls.
> > 
> > But I don't see how to do this: of course, I can without problem 
> > register a jprobe and a kretprobe on sys_open(), both how do I correlate 
> > pairs of probe calls reliably? Or is it just the wrong approach?
> > 
> > Any insight on how to do this, either with SystemTap or directly with 
> > Kprobes would be really appreciated!
> > 
> Although some syscalls are preemptible, but you can still correlate 
> the pairs of entry/return of a syscall by tid(task->pid). e.g:
>                   TID(task->pid)          Syscall
>                        1122           sys_open.entry
>   (preempted by foo())  223             foo.entry
>                           ...
>                         223             foo.return
>                        1122           sys_open.return
> So what you can do is just to search the sys_open.return with the same 
> tid and skip all the calls met during the search.

It sounds harder than it is. For the case of just sys_open, it is just
this:

---
global args

probe syscall.open {
  args[tid()] = argstr
}

probe syscall.open.return {
  printf("%s: %s(%s) = %s\n", execname(), name, args[tid()], retstr)
}
---

To extend that to multiple system calls, use "name" as a key:
args[name, tid()] = argstr


Martin
 



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]