perf tools: Fix truncated annotation
PATCH 1/1 perf tools: Fix truncated annotation
I get such truncated annotation results in 'perf top':
: Disassembly of section .text: ▒
: ▒
: ffffffff810966a8 <nr_iowait_cpu>: ▒
4.94 : ffffffff810966a8: movslq %edi,%rdi ▒
3.70 : ffffffff810966ab: mov $0x13700,%rax ▒
0.00 : ffffffff810966b2: add -0x7e32cb00(,%rdi,8),%rax ▒
8.64 : ffffffff810966ba: mov 0x7e0(%rax),%eax ▒
82.72 : ffffffff810966c0: cltq ▒Note the missing 'retq' which is there in the original function:
ffffffff810966a8 <nr_iowait_cpu>:
ffffffff810966a8: 48 63 ff movslq %edi,%rdi ffffffff810966ab: 48 c7 c0 00 37 01 00 mov $0x13700,%rax ffffffff810966b2: 48 03 04 fd 00 35 cd add -0x7e32cb00(,%rdi,8),%rax ffffffff810966b9: 81 ffffffff810966ba: 8b 80 e0 07 00 00 mov 0x7e0(%rax),%eax ffffffff810966c0: 48 98 cltq ffffffff810966c2: c3 retq
ffffffff810966c3 <this_cpu_load>:
I'm using a fairly recent binutils:
GNU objdump version 2.21.51.0.6-2.fc16 20110118
AFAICS the bug is simply that sym->end points to the last byte of the symbol in question - while objdump's --stop-address expects the last byte plus 1 to disassemble the full range.
Thanks,
Ingo
tools/perf/util/annotate.c +1 -1
@@ -334,7 +334,7 @@ fallback: disassembler_style ?"-M " :"" , disassembler_style ? disassembler_style :"" ,map__rip_2objdump (map, sym->start), -map__rip_2objdump (map, sym->end), +map__rip_2objdump (map, sym->end+1 ), symbol_conf.annotate_asm_raw ?"" :"--no-show-raw" , symbol_conf.annotate_src ?"-S" :"" , symfs_filename, filename);
Commit-ID: f41612f43be9575e1160460b08c3a760e6e27e1b Gitweb: http://git.kernel.org/tip/f41612f43be9575e1160460b08c3a760e6e27e1b Author: Ingo Molnar <[email protected]> AuthorDate: Fri, 23 Dec 2011 14:08:04 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 23 Dec 2011 16:39:19 -0200
perf tools: Fix truncated annotation
I get such truncated annotation results in 'perf top':
: Disassembly of section .text: ▒
: ▒
: ffffffff810966a8 <nr_iowait_cpu>: ▒
4.94 : ffffffff810966a8: movslq %edi,%rdi ▒
3.70 : ffffffff810966ab: mov $0x13700,%rax ▒
0.00 : ffffffff810966b2: add -0x7e32cb00(,%rdi,8),%rax ▒
8.64 : ffffffff810966ba: mov 0x7e0(%rax),%eax ▒
82.72 : ffffffff810966c0: cltq ▒Note the missing 'retq' which is there in the original function:
ffffffff810966a8 <nr_iowait_cpu>:
ffffffff810966a8: 48 63 ff movslq %edi,%rdi ffffffff810966ab: 48 c7 c0 00 37 01 00 mov $0x13700,%rax ffffffff810966b2: 48 03 04 fd 00 35 cd add -0x7e32cb00(,%rdi,8),%rax ffffffff810966b9: 81 ffffffff810966ba: 8b 80 e0 07 00 00 mov 0x7e0(%rax),%eax ffffffff810966c0: 48 98 cltq ffffffff810966c2: c3 retq
ffffffff810966c3 <this_cpu_load>:
I'm using a fairly recent binutils:
GNU objdump version 2.21.51.0.6-2.fc16 20110118
AFAICS the bug is simply that sym->end points to the last byte of the symbol in question - while objdump's --stop-address expects the last byte plus 1 to disassemble the full range.
--- tools/perf/util/annotate.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
tools/perf/util/annotate.c +1 -1
@@ -334,7 +334,7 @@ fallback: disassembler_style ?"-M " :"" , disassembler_style ? disassembler_style :"" ,map__rip_2objdump (map, sym->start), -map__rip_2objdump (map, sym->end), +map__rip_2objdump (map, sym->end+1 ), symbol_conf.annotate_asm_raw ?"" :"--no-show-raw" , symbol_conf.annotate_src ?"-S" :"" , symfs_filename, filename);