diff options
author | Mike Galbraith <efault@gmx.de> | 2009-07-02 02:09:46 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-07-02 02:42:21 -0400 |
commit | 429764873cf3fc3e73142872a674bb27cda589c1 (patch) | |
tree | a7c11887ad7aa055f56276a14acbe004d0ead434 /tools/perf/builtin-annotate.c | |
parent | 6cfcc53ed4f3ecb9319e73a03f34f1eddcb644dd (diff) |
perf_counter tools: Enable kernel module symbol loading in tools
Add the -m/--modules option to perf report and perf annotate,
which enables live module symbol/image loading. To be used
with -k/--vmlinux.
(Also give perf annotate a -P/--full-paths option.)
Signed-off-by: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <1246514986.13293.48.camel@marge.simson.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/builtin-annotate.c')
-rw-r--r-- | tools/perf/builtin-annotate.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 88205686eb6e..08ea6c5329d9 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c | |||
@@ -43,6 +43,10 @@ static int dump_trace = 0; | |||
43 | 43 | ||
44 | static int verbose; | 44 | static int verbose; |
45 | 45 | ||
46 | static int modules; | ||
47 | |||
48 | static int full_paths; | ||
49 | |||
46 | static int print_line; | 50 | static int print_line; |
47 | 51 | ||
48 | static unsigned long page_size; | 52 | static unsigned long page_size; |
@@ -171,7 +175,7 @@ static int load_kernel(void) | |||
171 | if (!kernel_dso) | 175 | if (!kernel_dso) |
172 | return -1; | 176 | return -1; |
173 | 177 | ||
174 | err = dso__load_kernel(kernel_dso, vmlinux, NULL, verbose, 0); | 178 | err = dso__load_kernel(kernel_dso, vmlinux, NULL, verbose, modules); |
175 | if (err <= 0) { | 179 | if (err <= 0) { |
176 | dso__delete(kernel_dso); | 180 | dso__delete(kernel_dso); |
177 | kernel_dso = NULL; | 181 | kernel_dso = NULL; |
@@ -1268,19 +1272,25 @@ static void print_summary(char *filename) | |||
1268 | 1272 | ||
1269 | static void annotate_sym(struct dso *dso, struct symbol *sym) | 1273 | static void annotate_sym(struct dso *dso, struct symbol *sym) |
1270 | { | 1274 | { |
1271 | char *filename = dso->name; | 1275 | char *filename = dso->name, *d_filename; |
1272 | u64 start, end, len; | 1276 | u64 start, end, len; |
1273 | char command[PATH_MAX*2]; | 1277 | char command[PATH_MAX*2]; |
1274 | FILE *file; | 1278 | FILE *file; |
1275 | 1279 | ||
1276 | if (!filename) | 1280 | if (!filename) |
1277 | return; | 1281 | return; |
1278 | if (dso == kernel_dso) | 1282 | if (sym->module) |
1283 | filename = sym->module->path; | ||
1284 | else if (dso == kernel_dso) | ||
1279 | filename = vmlinux; | 1285 | filename = vmlinux; |
1280 | 1286 | ||
1281 | start = sym->obj_start; | 1287 | start = sym->obj_start; |
1282 | if (!start) | 1288 | if (!start) |
1283 | start = sym->start; | 1289 | start = sym->start; |
1290 | if (full_paths) | ||
1291 | d_filename = filename; | ||
1292 | else | ||
1293 | d_filename = basename(filename); | ||
1284 | 1294 | ||
1285 | end = start + sym->end - sym->start + 1; | 1295 | end = start + sym->end - sym->start + 1; |
1286 | len = sym->end - sym->start; | 1296 | len = sym->end - sym->start; |
@@ -1291,13 +1301,14 @@ static void annotate_sym(struct dso *dso, struct symbol *sym) | |||
1291 | } | 1301 | } |
1292 | 1302 | ||
1293 | printf("\n\n------------------------------------------------\n"); | 1303 | printf("\n\n------------------------------------------------\n"); |
1294 | printf(" Percent | Source code & Disassembly of %s\n", filename); | 1304 | printf(" Percent | Source code & Disassembly of %s\n", d_filename); |
1295 | printf("------------------------------------------------\n"); | 1305 | printf("------------------------------------------------\n"); |
1296 | 1306 | ||
1297 | if (verbose >= 2) | 1307 | if (verbose >= 2) |
1298 | printf("annotating [%p] %30s : [%p] %30s\n", dso, dso->name, sym, sym->name); | 1308 | printf("annotating [%p] %30s : [%p] %30s\n", dso, dso->name, sym, sym->name); |
1299 | 1309 | ||
1300 | sprintf(command, "objdump --start-address=0x%016Lx --stop-address=0x%016Lx -dS %s", (u64)start, (u64)end, filename); | 1310 | sprintf(command, "objdump --start-address=0x%016Lx --stop-address=0x%016Lx -dS %s|grep -v %s", |
1311 | (u64)start, (u64)end, filename, filename); | ||
1301 | 1312 | ||
1302 | if (verbose >= 3) | 1313 | if (verbose >= 3) |
1303 | printf("doing: %s\n", command); | 1314 | printf("doing: %s\n", command); |
@@ -1472,8 +1483,12 @@ static const struct option options[] = { | |||
1472 | OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, | 1483 | OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, |
1473 | "dump raw trace in ASCII"), | 1484 | "dump raw trace in ASCII"), |
1474 | OPT_STRING('k', "vmlinux", &vmlinux, "file", "vmlinux pathname"), | 1485 | OPT_STRING('k', "vmlinux", &vmlinux, "file", "vmlinux pathname"), |
1486 | OPT_BOOLEAN('m', "modules", &modules, | ||
1487 | "load module symbols - WARNING: use only with -k and LIVE kernel"), | ||
1475 | OPT_BOOLEAN('l', "print-line", &print_line, | 1488 | OPT_BOOLEAN('l', "print-line", &print_line, |
1476 | "print matching source lines (may be slow)"), | 1489 | "print matching source lines (may be slow)"), |
1490 | OPT_BOOLEAN('P', "full-paths", &full_paths, | ||
1491 | "Don't shorten the displayed pathnames"), | ||
1477 | OPT_END() | 1492 | OPT_END() |
1478 | }; | 1493 | }; |
1479 | 1494 | ||