return ret;
 }
 
+static int hists__resort_cb(struct hist_entry *he, void *arg)
+{
+       struct report *rep = arg;
+       struct symbol *sym = he->ms.sym;
+
+       if (rep->symbol_ipc && sym && !sym->annotate2) {
+               struct perf_evsel *evsel = hists_to_evsel(he->hists);
+
+               symbol__annotate2(sym, he->ms.map, evsel,
+                                 &annotation__default_options, NULL);
+       }
+
+       return 0;
+}
+
 static void report__output_resort(struct report *rep)
 {
        struct ui_progress prog;
 
        ui_progress__init(&prog, rep->nr_entries, "Sorting events for output...");
 
-       evlist__for_each_entry(rep->session->evlist, pos)
-               perf_evsel__output_resort(pos, &prog);
+       evlist__for_each_entry(rep->session->evlist, pos) {
+               perf_evsel__output_resort_cb(pos, &prog,
+                                            hists__resort_cb, rep);
+       }
 
        ui_progress__finish();
 }
 
 {
 
        struct symbol *sym = he->ms.sym;
-       struct map *map = he->ms.map;
-       struct perf_evsel *evsel = hists_to_evsel(he->hists);
        struct annotation *notes;
        double ipc = 0.0, coverage = 0.0;
        char tmp[64];
        if (!sym)
                return repsep_snprintf(bf, size, "%-*s", width, "-");
 
-       if (!sym->annotate2 && symbol__annotate2(sym, map, evsel,
-               &annotation__default_options, NULL) < 0) {
-               return 0;
-       }
-
        notes = symbol__annotation(sym);
 
        if (notes->hit_cycles)