Lines Matching +full:stdout +full:- +full:path
4 * Parts came from builtin-annotate.c, see those files for further
11 #include "build-id.h"
24 pthread_mutex_init(¬es->lock, NULL); in symbol__annotate_init()
32 (sym->end - sym->start) * sizeof(u64)); in symbol__alloc_hist()
34 notes->src = zalloc(sizeof(*notes->src) + symbol_conf.nr_events * sizeof_sym_hist); in symbol__alloc_hist()
35 if (notes->src == NULL) in symbol__alloc_hist()
36 return -1; in symbol__alloc_hist()
37 notes->src->sizeof_sym_hist = sizeof_sym_hist; in symbol__alloc_hist()
38 notes->src->nr_histograms = symbol_conf.nr_events; in symbol__alloc_hist()
39 INIT_LIST_HEAD(¬es->src->source); in symbol__alloc_hist()
47 pthread_mutex_lock(¬es->lock); in symbol__annotate_zero_histograms()
48 if (notes->src != NULL) in symbol__annotate_zero_histograms()
49 memset(notes->src->histograms, 0, in symbol__annotate_zero_histograms()
50 notes->src->nr_histograms * notes->src->sizeof_sym_hist); in symbol__annotate_zero_histograms()
51 pthread_mutex_unlock(¬es->lock); in symbol__annotate_zero_histograms()
62 if (notes->src == NULL) in symbol__inc_addr_samples()
63 return -ENOMEM; in symbol__inc_addr_samples()
65 pr_debug3("%s: addr=%#" PRIx64 "\n", __func__, map->unmap_ip(map, addr)); in symbol__inc_addr_samples()
67 if (addr >= sym->end) in symbol__inc_addr_samples()
70 offset = addr - sym->start; in symbol__inc_addr_samples()
72 h->sum++; in symbol__inc_addr_samples()
73 h->addr[offset]++; in symbol__inc_addr_samples()
76 ", evidx=%d] => %" PRIu64 "\n", sym->start, sym->name, in symbol__inc_addr_samples()
77 addr, addr - sym->start, evidx, h->addr[offset]); in symbol__inc_addr_samples()
86 self->offset = offset; in objdump_line__new()
87 self->line = line; in objdump_line__new()
95 free(self->line); in objdump_line__free()
101 list_add_tail(&line->node, head); in objdump__add_line()
108 if (pos->offset >= 0) in objdump__get_next_ip_line()
122 if (oline->offset != -1) { in objdump_line__print()
123 const char *path = NULL; in objdump_line__print() local
128 struct source_line *src_line = notes->src->lines; in objdump_line__print()
130 s64 offset = oline->offset; in objdump_line__print()
133 next = objdump__get_next_ip_line(¬es->src->source, oline); in objdump_line__print()
136 (next == NULL || offset < next->offset)) { in objdump_line__print()
138 if (path == NULL) in objdump_line__print()
139 path = src_line[offset].path; in objdump_line__print()
142 hits += h->addr[offset]; in objdump_line__print()
147 if (src_line == NULL && h->sum) in objdump_line__print()
148 percent = 100.0 * hits / h->sum; in objdump_line__print()
151 return -1; in objdump_line__print()
157 list_for_each_entry_from(queue, ¬es->src->source, node) { in objdump_line__print()
172 if (path) { in objdump_line__print()
173 if (!prev_line || strcmp(prev_line, path) in objdump_line__print()
175 color_fprintf(stdout, color, " %s", path); in objdump_line__print()
176 prev_line = path; in objdump_line__print()
181 color_fprintf(stdout, color, " %7.2f", percent); in objdump_line__print()
183 color_fprintf(stdout, PERF_COLOR_BLUE, "%s\n", oline->line); in objdump_line__print()
188 return -1; in objdump_line__print()
190 if (!*oline->line) in objdump_line__print()
193 printf(" : %s\n", oline->line); in objdump_line__print()
206 s64 line_ip, offset = -1; in symbol__parse_objdump_line()
209 return -1; in symbol__parse_objdump_line()
212 return -1; in symbol__parse_objdump_line()
214 while (line_len != 0 && isspace(line[line_len - 1])) in symbol__parse_objdump_line()
215 line[--line_len] = '\0'; in symbol__parse_objdump_line()
221 line_ip = -1; in symbol__parse_objdump_line()
239 line_ip = -1; in symbol__parse_objdump_line()
242 if (line_ip != -1) { in symbol__parse_objdump_line()
243 u64 start = map__rip_2objdump(map, sym->start), in symbol__parse_objdump_line()
244 end = map__rip_2objdump(map, sym->end); in symbol__parse_objdump_line()
246 offset = line_ip - start; in symbol__parse_objdump_line()
248 offset = -1; in symbol__parse_objdump_line()
254 return -1; in symbol__parse_objdump_line()
256 objdump__add_line(¬es->src->source, objdump_line); in symbol__parse_objdump_line()
263 struct dso *dso = map->dso; in symbol__annotate()
277 if (dso->has_build_id) { in symbol__annotate()
279 sym->name); in symbol__annotate()
280 return -ENOMEM; in symbol__annotate()
289 * If we don't have build-ids or the build-id file isn't in the in symbol__annotate()
293 filename = dso->long_name; in symbol__annotate()
299 if (dso->symtab_type == SYMTAB__KALLSYMS) { in symbol__annotate()
303 if (dso->annotate_warned) in symbol__annotate()
306 if (dso->has_build_id) { in symbol__annotate()
307 build_id__sprintf(dso->build_id, in symbol__annotate()
308 sizeof(dso->build_id), bf + 15); in symbol__annotate()
311 err = -ENOENT; in symbol__annotate()
312 dso->annotate_warned = 1; in symbol__annotate()
314 "No vmlinux file%s\nwas found in the path.\n\n" in symbol__annotate()
316 " perf buildid-cache -av vmlinux\n\n" in symbol__annotate()
318 " --vmlinux vmlinux", in symbol__annotate()
319 sym->name, build_id_msg ?: ""); in symbol__annotate()
324 filename, sym->name, map->unmap_ip(map, sym->start), in symbol__annotate()
325 map->unmap_ip(map, sym->end)); in symbol__annotate()
328 dso, dso->long_name, sym, sym->name); in symbol__annotate()
331 "objdump %s%s --start-address=0x%016" PRIx64 in symbol__annotate()
332 " --stop-address=0x%016" PRIx64 in symbol__annotate()
333 " -d %s %s -C %s|grep -v %s|expand", in symbol__annotate()
334 disassembler_style ? "-M " : "", in symbol__annotate()
336 map__rip_2objdump(map, sym->start), in symbol__annotate()
337 map__rip_2objdump(map, sym->end+1), in symbol__annotate()
338 symbol_conf.annotate_asm_raw ? "" : "--no-show-raw", in symbol__annotate()
339 symbol_conf.annotate_src ? "-S" : "", in symbol__annotate()
362 struct rb_node **p = &root->rb_node; in insert_source_line()
369 if (src_line->percent > iter->percent) in insert_source_line()
370 p = &(*p)->rb_left; in insert_source_line()
372 p = &(*p)->rb_right; in insert_source_line()
375 rb_link_node(&src_line->node, parent, p); in insert_source_line()
376 rb_insert_color(&src_line->node, root); in insert_source_line()
382 struct source_line *src_line = notes->src->lines; in symbol__free_source_line()
386 free(src_line[i].path); in symbol__free_source_line()
389 notes->src->lines = NULL; in symbol__free_source_line()
404 if (!h->sum) in symbol__get_source_line()
407 src_line = notes->src->lines = calloc(len, sizeof(struct source_line)); in symbol__get_source_line()
408 if (!notes->src->lines) in symbol__get_source_line()
409 return -1; in symbol__get_source_line()
411 start = map->unmap_ip(map, sym->start); in symbol__get_source_line()
414 char *path = NULL; in symbol__get_source_line() local
419 src_line[i].percent = 100.0 * h->addr[i] / h->sum; in symbol__get_source_line()
424 sprintf(cmd, "addr2line -e %s %016" PRIx64, filename, offset); in symbol__get_source_line()
429 if (getline(&path, &line_len, fp) < 0 || !line_len) in symbol__get_source_line()
432 src_line[i].path = malloc(sizeof(char) * line_len + 1); in symbol__get_source_line()
433 if (!src_line[i].path) in symbol__get_source_line()
436 strcpy(src_line[i].path, path); in symbol__get_source_line()
452 printf("----------------------------------------------\n\n"); in print_summary()
463 char *path; in print_summary() local
466 percent = src_line->percent; in print_summary()
468 path = src_line->path; in print_summary()
470 color_fprintf(stdout, color, " %7.2f %s", percent, path); in print_summary()
479 u64 len = sym->end - sym->start, offset; in symbol__annotate_hits()
482 if (h->addr[offset] != 0) in symbol__annotate_hits()
484 sym->start + offset, h->addr[offset]); in symbol__annotate_hits()
485 printf("%*s: %" PRIu64 "\n", BITS_PER_LONG / 2, "h->sum", h->sum); in symbol__annotate_hits()
492 struct dso *dso = map->dso; in symbol__annotate_printf()
493 const char *filename = dso->long_name, *d_filename; in symbol__annotate_printf()
505 len = sym->end - sym->start; in symbol__annotate_printf()
508 printf("------------------------------------------------\n"); in symbol__annotate_printf()
513 list_for_each_entry(pos, ¬es->src->source, node) { in symbol__annotate_printf()
533 case -1: in symbol__annotate_printf()
542 queue = list_entry(queue->node.next, typeof(*queue), node); in symbol__annotate_printf()
557 memset(h, 0, notes->src->sizeof_sym_hist); in symbol__annotate_zero_histogram()
565 int len = sym->end - sym->start; in symbol__annotate_decay_histogram()
567 h->sum = 0; in symbol__annotate_decay_histogram()
569 list_for_each_entry(pos, ¬es->src->source, node) { in symbol__annotate_decay_histogram()
570 if (pos->offset != -1 && pos->offset < len) { in symbol__annotate_decay_histogram()
571 h->addr[pos->offset] = h->addr[pos->offset] * 7 / 8; in symbol__annotate_decay_histogram()
572 h->sum += h->addr[pos->offset]; in symbol__annotate_decay_histogram()
582 list_del(&pos->node); in objdump_line_list__purge()
591 struct dso *dso = map->dso; in symbol__tty_annotate()
592 const char *filename = dso->long_name; in symbol__tty_annotate()
597 return -1; in symbol__tty_annotate()
599 len = sym->end - sym->start; in symbol__tty_annotate()
612 objdump_line_list__purge(&symbol__annotation(sym)->src->source); in symbol__tty_annotate()