.. | .. |
---|
1 | 1 | // SPDX-License-Identifier: GPL-2.0 |
---|
2 | 2 | #include "gtk.h" |
---|
| 3 | +#include "util/sort.h" |
---|
3 | 4 | #include "util/debug.h" |
---|
4 | 5 | #include "util/annotate.h" |
---|
5 | 6 | #include "util/evsel.h" |
---|
| 7 | +#include "util/map.h" |
---|
| 8 | +#include "util/dso.h" |
---|
| 9 | +#include "util/symbol.h" |
---|
6 | 10 | #include "ui/helpline.h" |
---|
7 | 11 | #include <inttypes.h> |
---|
8 | 12 | #include <signal.h> |
---|
.. | .. |
---|
50 | 54 | return ret; |
---|
51 | 55 | } |
---|
52 | 56 | |
---|
53 | | -static int perf_gtk__get_offset(char *buf, size_t size, struct symbol *sym, |
---|
54 | | - struct map *map, struct disasm_line *dl) |
---|
| 57 | +static int perf_gtk__get_offset(char *buf, size_t size, struct map_symbol *ms, |
---|
| 58 | + struct disasm_line *dl) |
---|
55 | 59 | { |
---|
56 | | - u64 start = map__rip_2objdump(map, sym->start); |
---|
| 60 | + u64 start = map__rip_2objdump(ms->map, ms->sym->start); |
---|
57 | 61 | |
---|
58 | 62 | strcpy(buf, ""); |
---|
59 | 63 | |
---|
.. | .. |
---|
87 | 91 | return ret; |
---|
88 | 92 | } |
---|
89 | 93 | |
---|
90 | | -static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym, |
---|
91 | | - struct map *map, struct perf_evsel *evsel, |
---|
| 94 | +static int perf_gtk__annotate_symbol(GtkWidget *window, struct map_symbol *ms, |
---|
| 95 | + struct evsel *evsel, |
---|
92 | 96 | struct hist_browser_timer *hbt __maybe_unused) |
---|
93 | 97 | { |
---|
| 98 | + struct symbol *sym = ms->sym; |
---|
94 | 99 | struct disasm_line *pos, *n; |
---|
95 | 100 | struct annotation *notes; |
---|
96 | 101 | GType col_types[MAX_ANN_COLS]; |
---|
.. | .. |
---|
125 | 130 | |
---|
126 | 131 | gtk_list_store_append(store, &iter); |
---|
127 | 132 | |
---|
128 | | - if (perf_evsel__is_group_event(evsel)) { |
---|
129 | | - for (i = 0; i < evsel->nr_members; i++) { |
---|
| 133 | + if (evsel__is_group_event(evsel)) { |
---|
| 134 | + for (i = 0; i < evsel->core.nr_members; i++) { |
---|
130 | 135 | ret += perf_gtk__get_percent(s + ret, |
---|
131 | 136 | sizeof(s) - ret, |
---|
132 | 137 | sym, pos, |
---|
.. | .. |
---|
140 | 145 | |
---|
141 | 146 | if (ret) |
---|
142 | 147 | gtk_list_store_set(store, &iter, ANN_COL__PERCENT, s, -1); |
---|
143 | | - if (perf_gtk__get_offset(s, sizeof(s), sym, map, pos)) |
---|
| 148 | + if (perf_gtk__get_offset(s, sizeof(s), ms, pos)) |
---|
144 | 149 | gtk_list_store_set(store, &iter, ANN_COL__OFFSET, s, -1); |
---|
145 | 150 | if (perf_gtk__get_line(s, sizeof(s), pos)) |
---|
146 | 151 | gtk_list_store_set(store, &iter, ANN_COL__LINE, s, -1); |
---|
.. | .. |
---|
149 | 154 | gtk_container_add(GTK_CONTAINER(window), view); |
---|
150 | 155 | |
---|
151 | 156 | list_for_each_entry_safe(pos, n, ¬es->src->source, al.node) { |
---|
152 | | - list_del(&pos->al.node); |
---|
| 157 | + list_del_init(&pos->al.node); |
---|
153 | 158 | disasm_line__free(pos); |
---|
154 | 159 | } |
---|
155 | 160 | |
---|
156 | 161 | return 0; |
---|
157 | 162 | } |
---|
158 | 163 | |
---|
159 | | -static int symbol__gtk_annotate(struct symbol *sym, struct map *map, |
---|
160 | | - struct perf_evsel *evsel, |
---|
| 164 | +static int symbol__gtk_annotate(struct map_symbol *ms, struct evsel *evsel, |
---|
161 | 165 | struct hist_browser_timer *hbt) |
---|
162 | 166 | { |
---|
| 167 | + struct symbol *sym = ms->sym; |
---|
163 | 168 | GtkWidget *window; |
---|
164 | 169 | GtkWidget *notebook; |
---|
165 | 170 | GtkWidget *scrolled_window; |
---|
166 | 171 | GtkWidget *tab_label; |
---|
167 | 172 | int err; |
---|
168 | 173 | |
---|
169 | | - if (map->dso->annotate_warned) |
---|
| 174 | + if (ms->map->dso->annotate_warned) |
---|
170 | 175 | return -1; |
---|
171 | 176 | |
---|
172 | | - err = symbol__annotate(sym, map, evsel, 0, &annotation__default_options, NULL); |
---|
| 177 | + err = symbol__annotate(ms, evsel, &annotation__default_options, NULL); |
---|
173 | 178 | if (err) { |
---|
174 | 179 | char msg[BUFSIZ]; |
---|
175 | | - symbol__strerror_disassemble(sym, map, err, msg, sizeof(msg)); |
---|
| 180 | + symbol__strerror_disassemble(ms, err, msg, sizeof(msg)); |
---|
176 | 181 | ui__error("Couldn't annotate %s: %s\n", sym->name, msg); |
---|
177 | 182 | return -1; |
---|
178 | 183 | } |
---|
.. | .. |
---|
230 | 235 | gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolled_window, |
---|
231 | 236 | tab_label); |
---|
232 | 237 | |
---|
233 | | - perf_gtk__annotate_symbol(scrolled_window, sym, map, evsel, hbt); |
---|
| 238 | + perf_gtk__annotate_symbol(scrolled_window, ms, evsel, hbt); |
---|
234 | 239 | return 0; |
---|
235 | 240 | } |
---|
236 | 241 | |
---|
237 | 242 | int hist_entry__gtk_annotate(struct hist_entry *he, |
---|
238 | | - struct perf_evsel *evsel, |
---|
| 243 | + struct evsel *evsel, |
---|
239 | 244 | struct hist_browser_timer *hbt) |
---|
240 | 245 | { |
---|
241 | | - return symbol__gtk_annotate(he->ms.sym, he->ms.map, evsel, hbt); |
---|
| 246 | + return symbol__gtk_annotate(&he->ms, evsel, hbt); |
---|
242 | 247 | } |
---|
243 | 248 | |
---|
244 | 249 | void perf_gtk__show_annotations(void) |
---|