diff options
Diffstat (limited to 'tools/perf/util/annotate.c')
-rw-r--r-- | tools/perf/util/annotate.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 3a282c0057d2..f0a910371377 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <pthread.h> | 17 | #include <pthread.h> |
18 | 18 | ||
19 | const char *disassembler_style; | 19 | const char *disassembler_style; |
20 | const char *objdump_path; | ||
20 | 21 | ||
21 | static struct ins *ins__find(const char *name); | 22 | static struct ins *ins__find(const char *name); |
22 | static int disasm_line__parse(char *line, char **namep, char **rawp); | 23 | static int disasm_line__parse(char *line, char **namep, char **rawp); |
@@ -312,8 +313,8 @@ static struct ins_ops dec_ops = { | |||
312 | .scnprintf = dec__scnprintf, | 313 | .scnprintf = dec__scnprintf, |
313 | }; | 314 | }; |
314 | 315 | ||
315 | static int nop__scnprintf(struct ins *ins __used, char *bf, size_t size, | 316 | static int nop__scnprintf(struct ins *ins __maybe_unused, char *bf, size_t size, |
316 | struct ins_operands *ops __used) | 317 | struct ins_operands *ops __maybe_unused) |
317 | { | 318 | { |
318 | return scnprintf(bf, size, "%-6.6s", "nop"); | 319 | return scnprintf(bf, size, "%-6.6s", "nop"); |
319 | } | 320 | } |
@@ -415,7 +416,7 @@ static struct ins *ins__find(const char *name) | |||
415 | return bsearch(name, instructions, nmemb, sizeof(struct ins), ins__cmp); | 416 | return bsearch(name, instructions, nmemb, sizeof(struct ins), ins__cmp); |
416 | } | 417 | } |
417 | 418 | ||
418 | int symbol__annotate_init(struct map *map __used, struct symbol *sym) | 419 | int symbol__annotate_init(struct map *map __maybe_unused, struct symbol *sym) |
419 | { | 420 | { |
420 | struct annotation *notes = symbol__annotation(sym); | 421 | struct annotation *notes = symbol__annotation(sym); |
421 | pthread_mutex_init(¬es->lock, NULL); | 422 | pthread_mutex_init(¬es->lock, NULL); |
@@ -820,9 +821,10 @@ fallback: | |||
820 | dso, dso->long_name, sym, sym->name); | 821 | dso, dso->long_name, sym, sym->name); |
821 | 822 | ||
822 | snprintf(command, sizeof(command), | 823 | snprintf(command, sizeof(command), |
823 | "objdump %s%s --start-address=0x%016" PRIx64 | 824 | "%s %s%s --start-address=0x%016" PRIx64 |
824 | " --stop-address=0x%016" PRIx64 | 825 | " --stop-address=0x%016" PRIx64 |
825 | " -d %s %s -C %s|grep -v %s|expand", | 826 | " -d %s %s -C %s|grep -v %s|expand", |
827 | objdump_path ? objdump_path : "objdump", | ||
826 | disassembler_style ? "-M " : "", | 828 | disassembler_style ? "-M " : "", |
827 | disassembler_style ? disassembler_style : "", | 829 | disassembler_style ? disassembler_style : "", |
828 | map__rip_2objdump(map, sym->start), | 830 | map__rip_2objdump(map, sym->start), |
@@ -982,7 +984,8 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx, | |||
982 | int context) | 984 | int context) |
983 | { | 985 | { |
984 | struct dso *dso = map->dso; | 986 | struct dso *dso = map->dso; |
985 | const char *filename = dso->long_name, *d_filename; | 987 | char *filename; |
988 | const char *d_filename; | ||
986 | struct annotation *notes = symbol__annotation(sym); | 989 | struct annotation *notes = symbol__annotation(sym); |
987 | struct disasm_line *pos, *queue = NULL; | 990 | struct disasm_line *pos, *queue = NULL; |
988 | u64 start = map__rip_2objdump(map, sym->start); | 991 | u64 start = map__rip_2objdump(map, sym->start); |
@@ -990,6 +993,10 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx, | |||
990 | int more = 0; | 993 | int more = 0; |
991 | u64 len; | 994 | u64 len; |
992 | 995 | ||
996 | filename = strdup(dso->long_name); | ||
997 | if (!filename) | ||
998 | return -ENOMEM; | ||
999 | |||
993 | if (full_paths) | 1000 | if (full_paths) |
994 | d_filename = filename; | 1001 | d_filename = filename; |
995 | else | 1002 | else |
@@ -1040,6 +1047,8 @@ int symbol__annotate_printf(struct symbol *sym, struct map *map, int evidx, | |||
1040 | } | 1047 | } |
1041 | } | 1048 | } |
1042 | 1049 | ||
1050 | free(filename); | ||
1051 | |||
1043 | return more; | 1052 | return more; |
1044 | } | 1053 | } |
1045 | 1054 | ||