Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 306652
b: refs/heads/master
c: 73eff9f
h: refs/heads/master
v: v3
  • Loading branch information
Srikar Dronamraju authored and Arnaldo Carvalho de Melo committed May 11, 2012
1 parent 9be6e35 commit 5089d5a
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 225466f1c2d816c33b4341008f45dfdc83a9f0cb
refs/heads/master: 73eff9f56e15598c8399c0b86899fd889b97f085
8 changes: 6 additions & 2 deletions trunk/tools/perf/Documentation/perf-probe.txt
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ OPTIONS
Specify path to the executable or shared library file for user
space tracing. Can also be used with --funcs option.

In absence of -m/-x options, perf probe checks if the first argument after
the options is an absolute path name. If its an absolute path, perf probe
uses it as a target module/target user space binary to probe.

PROBE SYNTAX
------------
Probe points are defined by following syntax.
Expand Down Expand Up @@ -190,11 +194,11 @@ Delete all probes on schedule().

Add probes at zfree() function on /bin/zsh

./perf probe -x /bin/zsh zfree
./perf probe -x /bin/zsh zfree or ./perf probe /bin/zsh zfree

Add probes at malloc() function on libc

./perf probe -x /lib/libc.so.6 malloc
./perf probe -x /lib/libc.so.6 malloc or ./perf probe /lib/libc.so.6 malloc

SEE ALSO
--------
Expand Down
43 changes: 40 additions & 3 deletions trunk/tools/perf/builtin-probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,21 +85,58 @@ static int parse_probe_event(const char *str)
return ret;
}

static int set_target(const char *ptr)
{
int found = 0;
const char *buf;

/*
* The first argument after options can be an absolute path
* to an executable / library or kernel module.
*
* TODO: Support relative path, and $PATH, $LD_LIBRARY_PATH,
* short module name.
*/
if (!params.target && ptr && *ptr == '/') {
params.target = ptr;
found = 1;
buf = ptr + (strlen(ptr) - 3);

if (strcmp(buf, ".ko"))
params.uprobes = true;

}

return found;
}

static int parse_probe_event_argv(int argc, const char **argv)
{
int i, len, ret;
int i, len, ret, found_target;
char *buf;

found_target = set_target(argv[0]);
if (found_target && argc == 1)
return 0;

/* Bind up rest arguments */
len = 0;
for (i = 0; i < argc; i++)
for (i = 0; i < argc; i++) {
if (i == 0 && found_target)
continue;

len += strlen(argv[i]) + 1;
}
buf = zalloc(len + 1);
if (buf == NULL)
return -ENOMEM;
len = 0;
for (i = 0; i < argc; i++)
for (i = 0; i < argc; i++) {
if (i == 0 && found_target)
continue;

len += sprintf(&buf[len], "%s ", argv[i]);
}
params.mod_events = true;
ret = parse_probe_event(buf);
free(buf);
Expand Down

0 comments on commit 5089d5a

Please sign in to comment.