perf annotate browser: Do raw printing in 'o' ffset in a single place
Commit-ID: 5417072bf6b17eaa31f21f12906f381f148b5200 Gitweb: http://git.kernel.org/tip/5417072bf6b17eaa31f21f12906f381f148b5200 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Mon, 7 May 2012 18:54:16 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 7 May 2012 18:54:16 -0300
perf annotate browser: Do raw printing in 'o'ffset in a single place
Instead of doing the same in all ins scnprintf methods.
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 | 6 +----- tools/perf/util/annotate.c | 33 +++++++++++++++++++++++++-------- tools/perf/util/annotate.h | 4 +++- 3 files changed, 29 insertions(+), 14 deletions(-)
tools/perf/ui/browsers/annotate.c +1 -5
@@ -125,9 +125,6 @@ static void annotate_browser__write(struct ui_browser *self, void *entry, int ro }else {slsmg_write_nstring (" " ,2 ); } - - dl->ins->ops->scnprintf (dl->ins, bf,sizeof (bf), &dl->ops, - !ab->use_offset); }else {if (strcmp (dl->name,"retq" )) {slsmg_write_nstring (" " ,2 );
@@ -135,10 +132,9 @@ static void annotate_browser__write(struct ui_browser *self, void *entry, int roui_browser__write_graph (self,SLSMG_LARROW_CHAR );SLsmg_write_char (' ' ); } - -scnprintf (bf,sizeof (bf),"%-6.6s %s" , dl->name, dl->ops.raw); } +disasm_line__scnprintf (dl, bf,sizeof (bf), !ab->use_offset);slsmg_write_nstring (bf, width -10 - printed); }
tools/perf/util/annotate.c +25 -8
@@ -18,6 +18,21 @@const char *disassembler_style; +static int ins__raw_scnprintf (struct ins *ins,char *bf,size_t size, +struct ins_operands *ops) +{ +return scnprintf (bf, size,"%-6.6s %s" , ins->name, ops->raw); +} + +int ins__scnprintf (struct ins *ins,char *bf,size_t size, +struct ins_operands *ops) +{ +if (ins->ops->scnprintf) +return ins->ops->scnprintf (ins, bf, size, ops); + +return ins__raw_scnprintf (ins, bf, size, ops); +} +static int call__parse (struct ins_operands *ops) {char *endptr, *tok, *name;
@@ -50,11 +65,8 @@ indirect_call: }static int call__scnprintf (struct ins *ins,char *bf,size_t size, -struct ins_operands *ops,bool addrs) +struct ins_operands *ops) { -if (addrs) -return scnprintf (bf, size,"%-6.6s %s" , ins->name, ops->raw); -if (ops->target.name)return scnprintf (bf, size,"%-6.6s %s" , ins->name, ops->target.name);
@@ -86,11 +98,8 @@ static int jump__parse(struct ins_operands *ops) }static int jump__scnprintf (struct ins *ins,char *bf,size_t size, -struct ins_operands *ops,bool addrs) +struct ins_operands *ops) { -if (addrs) -return scnprintf (bf, size,"%-6.6s %s" , ins->name, ops->raw); -return scnprintf (bf, size,"%-6.6s %" PRIx64, ins->name, ops->target.offset); }
@@ -296,6 +305,14 @@ void disasm_line__free(struct disasm_line *dl)free (dl); } +int disasm_line__scnprintf (struct disasm_line *dl,char *bf,size_t size,bool raw) +{ +if (raw || !dl->ins) +return scnprintf (bf, size,"%-6.6s %s" , dl->name, dl->ops.raw); + +return ins__scnprintf (dl->ins, bf, size, &dl->ops); +} +static void disasm__add (struct list_head *head,struct disasm_line *line) {list_add_tail (&line->node, head);
tools/perf/util/annotate.h +3 -1
@@ -22,7 +22,7 @@ struct ins_operands {struct ins_ops {int (*parse)(struct ins_operands *ops);int (*scnprintf)(struct ins *ins,char *bf,size_t size, -struct ins_operands *ops,bool addrs); +struct ins_operands *ops); };struct ins {
@@ -32,6 +32,7 @@ struct ins {bool ins__is_jump (const struct ins *ins);bool ins__is_call (const struct ins *ins); +int ins__scnprintf (struct ins *ins,char *bf,size_t size,struct ins_operands *ops);struct disasm_line {struct list_head node;
@@ -49,6 +50,7 @@ static inline bool disasm_line__has_offset(const struct disasm_line *dl)void disasm_line__free (struct disasm_line *dl);struct disasm_line *disasm__get_next_ip_line (struct list_head *head,struct disasm_line *pos); +int disasm_line__scnprintf (struct disasm_line *dl,char *bf,size_t size,bool raw);size_t disasm__fprintf (struct list_head *head,FILE *fp);struct sym_hist {