|
@@ -243,33 +243,32 @@ struct sort_entry sort_sym = {
|
|
|
static int64_t
|
|
|
sort__srcline_cmp(struct hist_entry *left, struct hist_entry *right)
|
|
|
{
|
|
|
- return (int64_t)(right->ip - left->ip);
|
|
|
+ if (!left->srcline) {
|
|
|
+ if (!left->ms.map)
|
|
|
+ left->srcline = SRCLINE_UNKNOWN;
|
|
|
+ else {
|
|
|
+ struct map *map = left->ms.map;
|
|
|
+ left->srcline = get_srcline(map->dso,
|
|
|
+ map__rip_2objdump(map, left->ip));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!right->srcline) {
|
|
|
+ if (!right->ms.map)
|
|
|
+ right->srcline = SRCLINE_UNKNOWN;
|
|
|
+ else {
|
|
|
+ struct map *map = right->ms.map;
|
|
|
+ right->srcline = get_srcline(map->dso,
|
|
|
+ map__rip_2objdump(map, right->ip));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return strcmp(left->srcline, right->srcline);
|
|
|
}
|
|
|
|
|
|
static int hist_entry__srcline_snprintf(struct hist_entry *self, char *bf,
|
|
|
size_t size,
|
|
|
unsigned int width __maybe_unused)
|
|
|
{
|
|
|
- FILE *fp = NULL;
|
|
|
- char *path = self->srcline;
|
|
|
-
|
|
|
- if (path != NULL)
|
|
|
- goto out_path;
|
|
|
-
|
|
|
- if (!self->ms.map)
|
|
|
- goto out_ip;
|
|
|
-
|
|
|
- path = get_srcline(self->ms.map->dso, self->ip);
|
|
|
- self->srcline = path;
|
|
|
-
|
|
|
-out_path:
|
|
|
- if (fp)
|
|
|
- pclose(fp);
|
|
|
- return repsep_snprintf(bf, size, "%s", path);
|
|
|
-out_ip:
|
|
|
- if (fp)
|
|
|
- pclose(fp);
|
|
|
- return repsep_snprintf(bf, size, "%-#*llx", BITS_PER_LONG / 4, self->ip);
|
|
|
+ return repsep_snprintf(bf, size, "%s", self->srcline);
|
|
|
}
|
|
|
|
|
|
struct sort_entry sort_srcline = {
|