|
@@ -404,6 +404,12 @@ sort__sym_from_cmp(struct hist_entry *left, struct hist_entry *right)
|
|
|
struct addr_map_symbol *from_l = &left->branch_info->from;
|
|
|
struct addr_map_symbol *from_r = &right->branch_info->from;
|
|
|
|
|
|
+ if (!left->branch_info || !right->branch_info)
|
|
|
+ return cmp_null(left->branch_info, right->branch_info);
|
|
|
+
|
|
|
+ from_l = &left->branch_info->from;
|
|
|
+ from_r = &right->branch_info->from;
|
|
|
+
|
|
|
if (!from_l->sym && !from_r->sym)
|
|
|
return _sort__addr_cmp(from_l->addr, from_r->addr);
|
|
|
|
|
@@ -430,10 +436,14 @@ sort__sym_to_cmp(struct hist_entry *left, struct hist_entry *right)
|
|
|
static int hist_entry__sym_from_snprintf(struct hist_entry *he, char *bf,
|
|
|
size_t size, unsigned int width)
|
|
|
{
|
|
|
- struct addr_map_symbol *from = &he->branch_info->from;
|
|
|
- return _hist_entry__sym_snprintf(from->map, from->sym, from->addr,
|
|
|
- he->level, bf, size, width);
|
|
|
+ if (he->branch_info) {
|
|
|
+ struct addr_map_symbol *from = &he->branch_info->from;
|
|
|
|
|
|
+ return _hist_entry__sym_snprintf(from->map, from->sym, from->addr,
|
|
|
+ he->level, bf, size, width);
|
|
|
+ }
|
|
|
+
|
|
|
+ return repsep_snprintf(bf, size, "%-*.*s", width, width, "N/A");
|
|
|
}
|
|
|
|
|
|
static int hist_entry__sym_to_snprintf(struct hist_entry *he, char *bf,
|