lkml.org 
[lkml]   [2010]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/6] perf report: Pass the DSO to 'perf annotate'
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    So that we ensure that the symbol asked for annotation really is in the
    DSO we are interested in.

    Cc: Frédéric Weisbecker <fweisbec@gmail.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Paul Mackerras <paulus@samba.org>
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/newt.c | 47 ++++++++++++++++++++++++++---------------------
    1 files changed, 26 insertions(+), 21 deletions(-)

    diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c
    index f6953ca..24c9510 100644
    --- a/tools/perf/util/newt.c
    +++ b/tools/perf/util/newt.c
    @@ -157,7 +157,7 @@ static void __callchain__append_graph_browser(struct callchain_node *self,
    indexes[depth + 2] = NEWT_ARG_LAST;
    ++chain_idx;
    }
    - newt_checkbox_tree__add(tree, str, chain->ms.sym, indexes);
    + newt_checkbox_tree__add(tree, str, &chain->ms, indexes);
    free(alloc_str);
    ++printed;
    }
    @@ -193,7 +193,7 @@ static void callchain__append_graph_browser(struct callchain_node *self,
    continue;

    str = callchain_list__sym_name(chain, ipstr, sizeof(ipstr));
    - newt_checkbox_tree__add(tree, str, chain->ms.sym, indexes);
    + newt_checkbox_tree__add(tree, str, &chain->ms, indexes);
    }

    indexes[1] = parent_idx;
    @@ -287,14 +287,14 @@ static size_t hist_entry__append_browser(struct hist_entry *self,

    indexes[0] = NEWT_ARG_APPEND;
    indexes[1] = NEWT_ARG_LAST;
    - newt_checkbox_tree__add(tree, s, self->ms.sym, indexes);
    + newt_checkbox_tree__add(tree, s, &self->ms, indexes);
    } else
    - newtListboxAppendEntry(tree, s, self->ms.sym);
    + newtListboxAppendEntry(tree, s, &self->ms);

    return strlen(s);
    }

    -static void symbol__annotate_browser(const struct symbol *self)
    +static void map_symbol__annotate_browser(const struct map_symbol *self)
    {
    FILE *fp;
    int cols, rows;
    @@ -305,10 +305,11 @@ static void symbol__annotate_browser(const struct symbol *self)
    size_t max_usable_width;
    char *line = NULL;

    - if (self == NULL)
    + if (self->sym == NULL)
    return;

    - if (asprintf(&str, "perf annotate %s 2>&1 | expand", self->name) < 0)
    + if (asprintf(&str, "perf annotate -d %s %s 2>&1 | expand",
    + self->map->dso->long_name, self->sym->name) < 0)
    return;

    fp = popen(str, "r");
    @@ -338,7 +339,7 @@ static void symbol__annotate_browser(const struct symbol *self)

    newtListboxSetWidth(tree, max_line_len);

    - newtCenteredWindow(max_line_len + 2, rows - 5, self->name);
    + newtCenteredWindow(max_line_len + 2, rows - 5, self->sym->name);
    form = newt_form__new();
    newtFormAddComponents(form, tree, NULL);

    @@ -359,7 +360,7 @@ static const void *newt__symbol_tree_get_current(newtComponent self)

    static void perf_session__selection(newtComponent self, void *data)
    {
    - const struct symbol **symbol_ptr = data;
    + const struct map_symbol **symbol_ptr = data;
    *symbol_ptr = newt__symbol_tree_get_current(self);
    }

    @@ -376,7 +377,7 @@ void perf_session__browse_hists(struct rb_root *hists, u64 session_total,
    char str[1024];
    newtComponent form, tree;
    struct newtExitStruct es;
    - const struct symbol *selection;
    + const struct map_symbol *selection;

    snprintf(str, sizeof(str), "Samples: %Ld", session_total);
    newtDrawRootText(0, 0, str);
    @@ -416,11 +417,8 @@ void perf_session__browse_hists(struct rb_root *hists, u64 session_total,
    int len = hist_entry__append_browser(h, tree, session_total);
    if (len > max_len)
    max_len = len;
    - if (symbol_conf.use_callchain) {
    + if (symbol_conf.use_callchain)
    hist_entry__append_callchain_browser(h, tree, session_total, idx++);
    - if (idx > 3300)
    - break;
    - }
    }

    if (max_len > cols)
    @@ -445,10 +443,8 @@ void perf_session__browse_hists(struct rb_root *hists, u64 session_total,

    newtFormRun(form, &es);
    if (es.reason == NEWT_EXIT_HOTKEY) {
    - if (toupper(es.u.key) == 'A') {
    - symbol__annotate_browser(selection);
    - continue;
    - }
    + if (toupper(es.u.key) == 'A')
    + goto do_annotate;
    if (es.u.key == NEWT_KEY_ESCAPE ||
    toupper(es.u.key) == 'Q' ||
    es.u.key == CTRL('c')) {
    @@ -461,7 +457,7 @@ void perf_session__browse_hists(struct rb_root *hists, u64 session_total,

    if (selection != NULL) {
    snprintf(annotate, sizeof(annotate),
    - "Annotate %s", selection->name);
    + "Annotate %s", selection->sym->name);
    options[nr_options++] = annotate;
    }

    @@ -469,8 +465,17 @@ void perf_session__browse_hists(struct rb_root *hists, u64 session_total,
    choice = popup_menu(nr_options, options);
    if (choice == nr_options - 1)
    break;
    - else if (selection != NULL && choice >= 0)
    - symbol__annotate_browser(selection);
    + else if (selection != NULL && choice >= 0) {
    +do_annotate:
    + if (selection->map->dso->origin == DSO__ORIG_KERNEL) {
    + newtPopHelpLine();
    + newtPushHelpLine("No vmlinux file found, can't "
    + "annotate with just a "
    + "kallsyms file");
    + continue;
    + }
    + map_symbol__annotate_browser(selection);
    + }
    }

    newtFormDestroy(form);
    --
    1.6.2.5
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2010-03-24 19:05    [W:0.030 / U:0.616 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site