aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/util/sort.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 83336610faa9..03cabe5678d0 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -160,9 +160,10 @@ struct sort_entry sort_dso = {
160 160
161/* --sort symbol */ 161/* --sort symbol */
162 162
163static int64_t _sort__sym_cmp(struct symbol *sym_l, struct symbol *sym_r, 163static int64_t _sort__sym_cmp(struct symbol *sym_l, struct symbol *sym_r)
164 u64 ip_l, u64 ip_r)
165{ 164{
165 u64 ip_l, ip_r;
166
166 if (!sym_l || !sym_r) 167 if (!sym_l || !sym_r)
167 return cmp_null(sym_l, sym_r); 168 return cmp_null(sym_l, sym_r);
168 169
@@ -178,21 +179,10 @@ static int64_t _sort__sym_cmp(struct symbol *sym_l, struct symbol *sym_r,
178static int64_t 179static int64_t
179sort__sym_cmp(struct hist_entry *left, struct hist_entry *right) 180sort__sym_cmp(struct hist_entry *left, struct hist_entry *right)
180{ 181{
181 u64 ip_l, ip_r;
182
183 if (!left->ms.sym && !right->ms.sym) 182 if (!left->ms.sym && !right->ms.sym)
184 return right->level - left->level; 183 return right->level - left->level;
185 184
186 if (!left->ms.sym || !right->ms.sym) 185 return _sort__sym_cmp(left->ms.sym, right->ms.sym);
187 return cmp_null(left->ms.sym, right->ms.sym);
188
189 if (left->ms.sym == right->ms.sym)
190 return 0;
191
192 ip_l = left->ms.sym->start;
193 ip_r = right->ms.sym->start;
194
195 return _sort__sym_cmp(left->ms.sym, right->ms.sym, ip_l, ip_r);
196} 186}
197 187
198static int _hist_entry__sym_snprintf(struct map *map, struct symbol *sym, 188static int _hist_entry__sym_snprintf(struct map *map, struct symbol *sym,
@@ -383,8 +373,7 @@ sort__sym_from_cmp(struct hist_entry *left, struct hist_entry *right)
383 if (!from_l->sym && !from_r->sym) 373 if (!from_l->sym && !from_r->sym)
384 return right->level - left->level; 374 return right->level - left->level;
385 375
386 return _sort__sym_cmp(from_l->sym, from_r->sym, from_l->addr, 376 return _sort__sym_cmp(from_l->sym, from_r->sym);
387 from_r->addr);
388} 377}
389 378
390static int64_t 379static int64_t
@@ -396,7 +385,7 @@ sort__sym_to_cmp(struct hist_entry *left, struct hist_entry *right)
396 if (!to_l->sym && !to_r->sym) 385 if (!to_l->sym && !to_r->sym)
397 return right->level - left->level; 386 return right->level - left->level;
398 387
399 return _sort__sym_cmp(to_l->sym, to_r->sym, to_l->addr, to_r->addr); 388 return _sort__sym_cmp(to_l->sym, to_r->sym);
400} 389}
401 390
402static int hist_entry__sym_from_snprintf(struct hist_entry *self, char *bf, 391static int hist_entry__sym_from_snprintf(struct hist_entry *self, char *bf,