perf annotate browser: Use the disasm_line instruction name and operand fields
Commit-ID: 657bcaf5097e1aff53d724358deb24ce803f43a4 Gitweb: http://git.kernel.org/tip/657bcaf5097e1aff53d724358deb24ce803f43a4 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Sun, 15 Apr 2012 20:12:07 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 16 Apr 2012 12:16:39 -0300
perf annotate browser: Use the disasm_line instruction name and operand fields
No need to reparse it everytime.
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Mike Galbraith <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Stephane Eranian <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/ui/browsers/annotate.c | 29 ++++++++++------------------- 1 files changed, 10 insertions(+), 19 deletions(-)
tools/perf/ui/browsers/annotate.c +10 -19
@@ -260,22 +260,16 @@ static bool annotate_browser__callq(struct annotate_browser *browser, void *arg, int delay_secs) {struct map_symbol *ms = browser->b.priv; +struct disasm_line *dl = browser->selection;struct symbol *sym = ms->sym;struct annotation *notes;struct symbol *target; -char *s =strstr (browser->selection->line,"callq " );u64 ip; -if (s ==NULL ) +if (strcmp (dl->name,"callq" ))return false; - s =strchr (s,' ' ); -if (s++ ==NULL ) { -ui_helpline__puts ("Invallid callq instruction." ); -return true; - } - - ip =strtoull (s,NULL ,16 ); + ip =strtoull (dl->operands,NULL ,16 ); ip = ms->map->map_ip (ms->map, ip); target =map__find_symbol (ms->map, ip,NULL );if (target ==NULL ) {
@@ -321,22 +315,19 @@ struct disasm_line *annotate_browser__find_offset(struct annotate_browser *browsstatic bool annotate_browser__jump (struct annotate_browser *browser) { -const char *jumps[] = {"je " ,"jne " ,"ja " ,"jmpq " ,"js " ,"jmp " ,NULL }; -struct disasm_line *dl; +const char *jumps[] = {"je" ,"jne" ,"ja" ,"jmpq" ,"js" ,"jmp" ,NULL }; +struct disasm_line *dl = browser->selection;s64 idx, offset; -char *s =NULL ; +char *s;int i =0 ; -while (jumps[i]) { - s =strstr (browser->selection->line, jumps[i++]); -if (s) -break ; - } +while (jumps[i] &&strcmp (dl->name, jumps[i])) + ++i; -if (s ==NULL ) +if (jumps[i] ==NULL )return false; - s =strchr (s,'+' ); + s =strchr (dl->operands,'+' );if (s++ ==NULL ) {ui_helpline__puts ("Invallid jump instruction." );return true;