diff options
author | Arnd Bergmann <arnd@arndb.de> | 2012-10-04 16:57:00 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-10-04 16:57:51 -0400 |
commit | c37d6154c0b9163c27e53cc1d0be3867b4abd760 (patch) | |
tree | 7a24522c56d1cb284dff1d3c225bbdaba0901bb5 /tools/perf/util/annotate.c | |
parent | e7a570ff7dff9af6e54ff5e580a61ec7652137a0 (diff) | |
parent | 8a1ab3155c2ac7fbe5f2038d6e26efeb607a1498 (diff) |
Merge branch 'disintegrate-asm-generic' of git://git.infradead.org/users/dhowells/linux-headers into asm-generic
Patches from David Howells <dhowells@redhat.com>:
This is to complete part of the UAPI disintegration for which the
preparatory patches were pulled recently.
Note that there are some fixup patches which are at the base of the
branch aimed at you, plus all arches get the asm-generic branch merged in too.
* 'disintegrate-asm-generic' of git://git.infradead.org/users/dhowells/linux-headers:
UAPI: (Scripted) Disintegrate include/asm-generic
UAPI: Fix conditional header installation handling (notably kvm_para.h on m68k)
c6x: remove c6x signal.h
UAPI: Split compound conditionals containing __KERNEL__ in Arm64
UAPI: Fix the guards on various asm/unistd.h files
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
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 | ||