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 | ||
