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" 12 #include "util/debug.h" 13 #include "util/parse-options.h" 14 #include "util/session.h" 15 #include "util/symbol.h" 16 17 static char const *input_name = "perf.data"; 18 static int force; 19 20 static const char * const buildid_list_usage[] = { 21 "perf buildid-list [<options>]", 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, 30 "be more verbose"), 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; 57 struct perf_session *session; 58 59 session = perf_session__new(input_name, O_RDONLY, force); 60 if (session == NULL) 61 return -1; 62 63 err = perf_header__process_sections(&session->header, session->fd, 64 perf_file_section__process_buildids); 65 if (err >= 0) 66 dsos__fprintf_buildid(stdout); 67 68 perf_session__delete(session); 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 } 78