On Wednesday 23 April 2014 22:21:07 Andi Kleen wrote:
> Jun Wang <junwang...@gmail.com> writes:
> > Hi Everyone,
> > 
> > With systemTap, in the absence of debugging information (DWARF), one
> > can access function parameters using (positional) numbers. Can the
> > same be done with `perf`?
> > Why? I'm trying to capture variables in a kernel function but I don't
> > have an good perf with DWARF support and there is are significant
> > challenges to build one due to the relatively old distro.
> 
> You can specify the registers according to the ABI.
> di = 1. arg, si = 2nd arg etc.

As I did not directly figure out how one can make use of this, here's what I 
found out:

You'll have to define a tracepoint which catches the function callback:

perf probe -x /usr/lib/libc.so.6 --add malloc="malloc size=%di"

Then, you can access the argument, e.g. perf script -g for a perf.data 
generated with the above tracepoint will contain something like this:

def probe_libc__malloc(event_name, context, common_cpu,
        common_secs, common_nsecs, common_pid, common_comm,
        __probe_ip, size):

Note the "size" argument. Similarly, you could catch the return value like 
this:

perf probe -x /usr/lib/libc.so.6 --add malloc_return="malloc%return 
ret=\$retval"

leading to:

def probe_libc__malloc_return(event_name, context, common_cpu,
        common_secs, common_nsecs, common_pid, common_comm,
        __probe_func, __probe_ret_ip, ret):

Bye
-- 
Milian Wolff
m...@milianw.de
http://milianw.de
--
To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to