-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
perf buildid-list: New plumbing command
With this we can list the buildids in a perf.data file so that we can pipe them to other, distro specific tools that from the buildids can figure out separate packages (foo-debuginfo) where we can find the matching symtabs so that perf report can do its job. E.g: [acme@doppio linux-2.6-tip]$ perf buildid-list | head -5 8e08b117e5458ad3f85da16d42d0fc5cd21c5869 520c2387a587cc5acfcf881e27dba1caaeab4b1f ec8dd400904ddfcac8b1c343263a790f977159dc 7caedbca5a6d8ab39a7fe44bd28c07d3e14a3f3f 379bb828fd08859dbea73279f04abefabc95a6a3 [acme@doppio linux-2.6-tip]$ perf buildid-list -v | head -5 8e08b117e5458ad3f85da16d42d0fc5cd21c5869 /sbin/init 520c2387a587cc5acfcf881e27dba1caaeab4b1f /lib64/ld-2.10.1.so ec8dd400904ddfcac8b1c343263a790f977159dc /lib64/libc-2.10.1.so 7caedbca5a6d8ab39a7fe44bd28c07d3e14a3f3f /sbin/udevd 379bb828fd08859dbea73279f04abefabc95a6a3 /lib64/libdl-2.10.1.so [acme@doppio linux-2.6-tip]$ Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> LKML-Reference: <1258396365-29217-5-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
- Loading branch information
Arnaldo Carvalho de Melo
authored and
Ingo Molnar
committed
Nov 16, 2009
1 parent
9e03eb2
commit c34984b
Showing
6 changed files
with
154 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
perf-buildid-list(1) | ||
==================== | ||
|
||
NAME | ||
---- | ||
perf-buildid-list - List the buildids in a perf.data file | ||
|
||
SYNOPSIS | ||
-------- | ||
[verse] | ||
'perf buildid-list <options>' | ||
|
||
DESCRIPTION | ||
----------- | ||
This command displays the buildids found in a perf.data file, so that other | ||
tools can be used to fetch packages with matching symbol tables for use by | ||
perf report. | ||
|
||
OPTIONS | ||
------- | ||
-i:: | ||
--input=:: | ||
Input file name. (default: perf.data) | ||
-f:: | ||
--force:: | ||
Don't do ownership validation. | ||
-v:: | ||
--verbose:: | ||
Be more verbose, showing the name of the DSOs after the buildids. | ||
|
||
SEE ALSO | ||
-------- | ||
linkperf:perf-record[1], linkperf:perf-top[1], | ||
linkperf:perf-report[1] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
/* | ||
* builtin-buildid-list.c | ||
* | ||
* Builtin buildid-list command: list buildids in perf.data | ||
* | ||
* Copyright (C) 2009, Red Hat Inc. | ||
* Copyright (C) 2009, Arnaldo Carvalho de Melo <acme@redhat.com> | ||
*/ | ||
#include "builtin.h" | ||
#include "perf.h" | ||
#include "util/cache.h" | ||
#include "util/data_map.h" | ||
#include "util/debug.h" | ||
#include "util/header.h" | ||
#include "util/parse-options.h" | ||
#include "util/symbol.h" | ||
|
||
static char const *input_name = "perf.data"; | ||
static int force; | ||
|
||
static const char *const buildid_list_usage[] = { | ||
"perf report [<options>]", | ||
NULL | ||
}; | ||
|
||
static const struct option options[] = { | ||
OPT_STRING('i', "input", &input_name, "file", | ||
"input file name"), | ||
OPT_BOOLEAN('f', "force", &force, "don't complain, do it"), | ||
OPT_BOOLEAN('v', "verbose", &verbose, | ||
"be more verbose (show counter open errors, etc)"), | ||
OPT_END() | ||
}; | ||
|
||
static int perf_file_section__process_buildids(struct perf_file_section *self, | ||
int feat, int fd) | ||
{ | ||
if (feat != HEADER_BUILD_ID) | ||
return 0; | ||
|
||
if (lseek(fd, self->offset, SEEK_SET) < 0) { | ||
pr_warning("Failed to lseek to %Ld offset for buildids!\n", | ||
self->offset); | ||
return -1; | ||
} | ||
|
||
if (perf_header__read_build_ids(fd, self->offset, self->size)) { | ||
pr_warning("Failed to read buildids!\n"); | ||
return -1; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
static int __cmd_buildid_list(void) | ||
{ | ||
int err = -1; | ||
struct perf_header *header; | ||
struct perf_file_header f_header; | ||
struct stat input_stat; | ||
int input = open(input_name, O_RDONLY); | ||
|
||
if (input < 0) { | ||
pr_err("failed to open file: %s", input_name); | ||
if (!strcmp(input_name, "perf.data")) | ||
pr_err(" (try 'perf record' first)"); | ||
pr_err("\n"); | ||
goto out; | ||
} | ||
|
||
err = fstat(input, &input_stat); | ||
if (err < 0) { | ||
perror("failed to stat file"); | ||
goto out_close; | ||
} | ||
|
||
if (!force && input_stat.st_uid && (input_stat.st_uid != geteuid())) { | ||
pr_err("file %s not owned by current user or root\n", | ||
input_name); | ||
goto out_close; | ||
} | ||
|
||
if (!input_stat.st_size) { | ||
pr_info("zero-sized file, nothing to do!\n"); | ||
goto out_close; | ||
} | ||
|
||
err = -1; | ||
header = perf_header__new(); | ||
if (header == NULL) | ||
goto out_close; | ||
|
||
if (perf_file_header__read(&f_header, header, input) < 0) { | ||
pr_warning("incompatible file format"); | ||
goto out_close; | ||
} | ||
|
||
err = perf_header__process_sections(header, input, | ||
perf_file_section__process_buildids); | ||
|
||
if (err < 0) | ||
goto out_close; | ||
|
||
dsos__fprintf_buildid(stdout); | ||
out_close: | ||
close(input); | ||
out: | ||
return err; | ||
} | ||
|
||
int cmd_buildid_list(int argc, const char **argv, const char *prefix __used) | ||
{ | ||
argc = parse_options(argc, argv, options, buildid_list_usage, 0); | ||
setup_pager(); | ||
return __cmd_buildid_list(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters