Commit | Line | Data |
---|---|---|
c34984b2 ACM |
1 | /* |
2 | * builtin-buildid-list.c | |
3 | * | |
4 | * Builtin buildid-list command: list buildids in perf.data | |
5 | * | |
6 | * Copyright (C) 2009, Red Hat Inc. | |
7 | * Copyright (C) 2009, Arnaldo Carvalho de Melo <acme@redhat.com> | |
8 | */ | |
9 | #include "builtin.h" | |
10 | #include "perf.h" | |
11 | #include "util/cache.h" | |
c34984b2 | 12 | #include "util/debug.h" |
c34984b2 | 13 | #include "util/parse-options.h" |
94c744b6 | 14 | #include "util/session.h" |
c34984b2 ACM |
15 | #include "util/symbol.h" |
16 | ||
17 | static char const *input_name = "perf.data"; | |
18 | static int force; | |
19 | ||
0422a4fc | 20 | static const char * const buildid_list_usage[] = { |
b9b1e1c7 | 21 | "perf buildid-list [<options>]", |
c34984b2 ACM |
22 | NULL |
23 | }; | |
24 | ||
25 | static const struct option options[] = { | |
26 | OPT_STRING('i', "input", &input_name, "file", | |
27 | "input file name"), | |
28 | OPT_BOOLEAN('f', "force", &force, "don't complain, do it"), | |
29 | OPT_BOOLEAN('v', "verbose", &verbose, | |
1124ba73 | 30 | "be more verbose"), |
c34984b2 ACM |
31 | OPT_END() |
32 | }; | |
33 | ||
34 | static int perf_file_section__process_buildids(struct perf_file_section *self, | |
35 | int feat, int fd) | |
36 | { | |
37 | if (feat != HEADER_BUILD_ID) | |
38 | return 0; | |
39 | ||
40 | if (lseek(fd, self->offset, SEEK_SET) < 0) { | |
41 | pr_warning("Failed to lseek to %Ld offset for buildids!\n", | |
42 | self->offset); | |
43 | return -1; | |
44 | } | |
45 | ||
46 | if (perf_header__read_build_ids(fd, self->offset, self->size)) { | |
47 | pr_warning("Failed to read buildids!\n"); | |
48 | return -1; | |
49 | } | |
50 | ||
51 | return 0; | |
52 | } | |
53 | ||
54 | static int __cmd_buildid_list(void) | |
55 | { | |
56 | int err = -1; | |
75be6cf4 ACM |
57 | struct perf_session *session; |
58 | ||
59 | session = perf_session__new(input_name, O_RDONLY, force); | |
94c744b6 ACM |
60 | if (session == NULL) |
61 | return -1; | |
c34984b2 | 62 | |
94c744b6 | 63 | err = perf_header__process_sections(&session->header, session->fd, |
c34984b2 | 64 | perf_file_section__process_buildids); |
94c744b6 ACM |
65 | if (err >= 0) |
66 | dsos__fprintf_buildid(stdout); | |
c34984b2 | 67 | |
94c744b6 | 68 | perf_session__delete(session); |
c34984b2 ACM |
69 | return err; |
70 | } | |
71 | ||
72 | int cmd_buildid_list(int argc, const char **argv, const char *prefix __used) | |
73 | { | |
74 | argc = parse_options(argc, argv, options, buildid_list_usage, 0); | |
75 | setup_pager(); | |
76 | return __cmd_buildid_list(); | |
77 | } |