1 #ifndef __PERF_ANNOTATE_H
2 #define __PERF_ANNOTATE_H
10 #include <linux/list.h>
11 #include <linux/rbtree.h>
32 struct ins_operands *ops;
38 void (*free)(struct ins_operands *ops);
39 int (*parse)(struct ins_operands *ops);
40 int (*scnprintf)(struct ins *ins, char *bf, size_t size,
41 struct ins_operands *ops);
49 bool ins__is_jump(const struct ins *ins);
50 bool ins__is_call(const struct ins *ins);
51 int ins__scnprintf(struct ins *ins, char *bf, size_t size, struct ins_operands *ops);
54 struct list_head node;
59 struct ins_operands ops;
62 static inline bool disasm_line__has_offset(const struct disasm_line *dl)
64 return dl->ops.target.offset != UINT64_MAX;
67 void disasm_line__free(struct disasm_line *dl);
68 struct disasm_line *disasm__get_next_ip_line(struct list_head *head, struct disasm_line *pos);
69 int disasm_line__scnprintf(struct disasm_line *dl, char *bf, size_t size, bool raw);
70 size_t disasm__fprintf(struct list_head *head, FILE *fp);
77 struct source_line_percent {
85 struct source_line_percent p[1];
88 /** struct annotated_source - symbols with hits have this attached as in sannotation
90 * @histogram: Array of addr hit histograms per event being monitored
91 * @lines: If 'print_lines' is specified, per source code line percentages
92 * @source: source parsed from a disassembler like objdump -dS
94 * lines is allocated, percentages calculated and all sorted by percentage
95 * when the annotation is about to be presented, so the percentages are for
96 * one of the entries in the histogram array, i.e. for the event/counter being
97 * presented. It is deallocated right after symbol__{tui,tty,etc}_annotate
100 struct annotated_source {
101 struct list_head source;
102 struct source_line *lines;
105 struct sym_hist histograms[0];
109 pthread_mutex_t lock;
110 struct annotated_source *src;
114 struct annotation annotation;
115 struct symbol symbol;
118 static inline struct sym_hist *annotation__histogram(struct annotation *notes, int idx)
120 return (((void *)¬es->src->histograms) +
121 (notes->src->sizeof_sym_hist * idx));
124 static inline struct annotation *symbol__annotation(struct symbol *sym)
126 struct sannotation *a = container_of(sym, struct sannotation, symbol);
127 return &a->annotation;
130 int symbol__inc_addr_samples(struct symbol *sym, struct map *map,
131 int evidx, u64 addr);
132 int symbol__alloc_hist(struct symbol *sym);
133 void symbol__annotate_zero_histograms(struct symbol *sym);
135 int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize);
136 int symbol__annotate_init(struct map *map __maybe_unused, struct symbol *sym);
137 int symbol__annotate_printf(struct symbol *sym, struct map *map,
138 struct perf_evsel *evsel, bool full_paths,
139 int min_pcnt, int max_lines, int context);
140 void symbol__annotate_zero_histogram(struct symbol *sym, int evidx);
141 void symbol__annotate_decay_histogram(struct symbol *sym, int evidx);
142 void disasm__purge(struct list_head *head);
144 int symbol__tty_annotate(struct symbol *sym, struct map *map,
145 struct perf_evsel *evsel, bool print_lines,
146 bool full_paths, int min_pcnt, int max_lines);
149 int symbol__tui_annotate(struct symbol *sym, struct map *map,
150 struct perf_evsel *evsel,
151 struct hist_browser_timer *hbt);
153 static inline int symbol__tui_annotate(struct symbol *sym __maybe_unused,
154 struct map *map __maybe_unused,
155 struct perf_evsel *evsel __maybe_unused,
156 struct hist_browser_timer *hbt
164 int symbol__gtk_annotate(struct symbol *sym, struct map *map,
165 struct perf_evsel *evsel,
166 struct hist_browser_timer *hbt);
168 static inline int hist_entry__gtk_annotate(struct hist_entry *he,
169 struct perf_evsel *evsel,
170 struct hist_browser_timer *hbt)
172 return symbol__gtk_annotate(he->ms.sym, he->ms.map, evsel, hbt);
175 void perf_gtk__show_annotations(void);
177 static inline int hist_entry__gtk_annotate(struct hist_entry *he __maybe_unused,
178 struct perf_evsel *evsel __maybe_unused,
179 struct hist_browser_timer *hbt __maybe_unused)
184 static inline void perf_gtk__show_annotations(void) {}
187 extern const char *disassembler_style;
189 #endif /* __PERF_ANNOTATE_H */