diff options
Diffstat (limited to 'tools/perf/ui/browsers/hists.c')
| -rw-r--r-- | tools/perf/ui/browsers/hists.c | 21 | 
1 files changed, 16 insertions, 5 deletions
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index 52c03fbbba17..04a229aa5c0f 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c @@ -17,6 +17,7 @@  #include "../util.h"  #include "../ui.h"  #include "map.h" +#include "annotate.h"  struct hist_browser {  	struct ui_browser   b; @@ -1593,13 +1594,18 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,  					 bi->to.sym->name) > 0)  				annotate_t = nr_options++;  		} else { -  			if (browser->selection != NULL &&  			    browser->selection->sym != NULL && -			    !browser->selection->map->dso->annotate_warned && -				asprintf(&options[nr_options], "Annotate %s", -					 browser->selection->sym->name) > 0) -				annotate = nr_options++; +			    !browser->selection->map->dso->annotate_warned) { +				struct annotation *notes; + +				notes = symbol__annotation(browser->selection->sym); + +				if (notes->src && +				    asprintf(&options[nr_options], "Annotate %s", +						 browser->selection->sym->name) > 0) +					annotate = nr_options++; +			}  		}  		if (thread != NULL && @@ -1656,6 +1662,7 @@ retry_popup_menu:  		if (choice == annotate || choice == annotate_t || choice == annotate_f) {  			struct hist_entry *he; +			struct annotation *notes;  			int err;  do_annotate:  			if (!objdump_path && perf_session_env__lookup_objdump(env)) @@ -1679,6 +1686,10 @@ do_annotate:  				he->ms.map = he->branch_info->to.map;  			} +			notes = symbol__annotation(he->ms.sym); +			if (!notes->src) +				continue; +  			/*  			 * Don't let this be freed, say, by hists__decay_entry.  			 */  |