]> Git Repo - linux.git/blobdiff - tools/perf/builtin-top.c
perf annotate: Pass a 'map_symbol' in places receiving a pair of 'map' and 'symbol...
[linux.git] / tools / perf / builtin-top.c
index 1f60124eb19bb4e722f22323bcb46d0c27491800..dc80044bc46f48cdd7123eced665a33017bd6343 100644 (file)
@@ -82,6 +82,7 @@
 #include <linux/err.h>
 
 #include <linux/ctype.h>
+#include <perf/mmap.h>
 
 static volatile int done;
 static volatile int resize;
@@ -142,12 +143,12 @@ static int perf_top__parse_source(struct perf_top *top, struct hist_entry *he)
                return err;
        }
 
-       err = symbol__annotate(sym, map, evsel, 0, &top->annotation_opts, NULL);
+       err = symbol__annotate(&he->ms, evsel, 0, &top->annotation_opts, NULL);
        if (err == 0) {
                top->sym_filter_entry = he;
        } else {
                char msg[BUFSIZ];
-               symbol__strerror_disassemble(sym, map, err, msg, sizeof(msg));
+               symbol__strerror_disassemble(&he->ms, err, msg, sizeof(msg));
                pr_err("Couldn't annotate %s: %s\n", sym->name, msg);
        }
 
@@ -256,7 +257,7 @@ static void perf_top__show_details(struct perf_top *top)
        printf("Showing %s for %s\n", perf_evsel__name(top->sym_evsel), symbol->name);
        printf("  Events  Pcnt (>=%d%%)\n", top->annotation_opts.min_pcnt);
 
-       more = symbol__annotate_printf(symbol, he->ms.map, top->sym_evsel, &top->annotation_opts);
+       more = symbol__annotate_printf(&he->ms, top->sym_evsel, &top->annotation_opts);
 
        if (top->evlist->enabled) {
                if (top->zero)
@@ -724,7 +725,8 @@ static int hist_iter__top_callback(struct hist_entry_iter *iter,
                perf_top__record_precise_ip(top, he, iter->sample, evsel, al->addr);
 
        hist__account_cycles(iter->sample->branch_stack, al, iter->sample,
-                    !(top->record_opts.branch_stack & PERF_SAMPLE_BRANCH_ANY));
+                    !(top->record_opts.branch_stack & PERF_SAMPLE_BRANCH_ANY),
+                    NULL);
        return 0;
 }
 
@@ -869,10 +871,10 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)
        union perf_event *event;
 
        md = opts->overwrite ? &evlist->overwrite_mmap[idx] : &evlist->mmap[idx];
-       if (perf_mmap__read_init(md) < 0)
+       if (perf_mmap__read_init(&md->core) < 0)
                return;
 
-       while ((event = perf_mmap__read_event(md)) != NULL) {
+       while ((event = perf_mmap__read_event(&md->core)) != NULL) {
                int ret;
 
                ret = perf_evlist__parse_sample_timestamp(evlist, event, &last_timestamp);
@@ -883,7 +885,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)
                if (ret)
                        break;
 
-               perf_mmap__consume(md);
+               perf_mmap__consume(&md->core);
 
                if (top->qe.rotate) {
                        pthread_mutex_lock(&top->qe.mutex);
@@ -893,7 +895,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)
                }
        }
 
-       perf_mmap__read_done(md);
+       perf_mmap__read_done(&md->core);
 }
 
 static void perf_top__mmap_read(struct perf_top *top)
@@ -1560,6 +1562,17 @@ int cmd_top(int argc, const char **argv)
        status = perf_config(perf_top_config, &top);
        if (status)
                return status;
+       /*
+        * Since the per arch annotation init routine may need the cpuid, read
+        * it here, since we are not getting this from the perf.data header.
+        */
+       status = perf_env__read_cpuid(&perf_env);
+       if (status) {
+               pr_err("Couldn't read the cpuid for this machine: %s\n",
+                      str_error_r(errno, errbuf, sizeof(errbuf)));
+               goto out_delete_evlist;
+       }
+       top.evlist->env = &perf_env;
 
        argc = parse_options(argc, argv, options, top_usage, 0);
        if (argc)
This page took 0.032414 seconds and 4 git commands to generate.