On Mon, Dec 01, 2014 at 09:40:10AM -0500, Kan Liang wrote:

SNIP

> +static int64_t
> +sort__symoff_collapse(struct hist_entry *left, struct hist_entry *right)
> +{
> +     struct symbol *sym_l = left->ms.sym;
> +     struct symbol *sym_r = right->ms.sym;
> +     u64 symoff_l, symoff_r;
> +     int64_t ret;
> +
> +     if (!sym_l || !sym_r)
> +             return cmp_null(sym_l, sym_r);
> +
> +     ret = strcmp(sym_r->name, sym_l->name);
> +     if (ret)
> +             return ret;
> +
> +
> +     symoff_l = left->ip - sym_l->start;
> +     symoff_r = right->ip - sym_r->start;
> +
> +     return (int64_t)(symoff_r - symoff_l);
> +}
> +
> +static int hist_entry__symoff_snprintf(struct hist_entry *he, char *bf,
> +                                 size_t size, unsigned int width)
> +{
> +     struct map *map = he->ms.map;
> +     struct symbol *sym = he->ms.sym;
> +     size_t ret = 0;
> +
> +     if (sym) {
> +             ret += repsep_snprintf(bf + ret, size - ret, "%s", sym->name);
> +             ret += repsep_snprintf(bf + ret, size - ret, "+0x%llx",
> +                                    he->ip - sym->start);
> +
> +     } else {
> +             size_t len = BITS_PER_LONG / 4;
> +
> +             ret += repsep_snprintf(bf + ret, size - ret, "%-#.*llx", len,
> +                                    map ? map->unmap_ip(map, he->ip) : 
> he->ip);
> +     }
> +
> +     ret += repsep_snprintf(bf + ret, size - ret, "%-*s",
> +                            width - ret, "");
> +     return ret;
> +}
> +
> +struct sort_entry sort_symoff = {
> +     .se_header      = "Symbol + Offset",
> +     .se_cmp         = sort__symoff_cmp,
> +     .se_snprintf    = hist_entry__symoff_snprintf,
> +     .se_width_idx   = HISTC_SYMOFF,
> +};

I might have missed this in previous discussions,
but do we also want just pure string comparison?

now I get:
     0.30%   +0.42%  main+0x110                         
     1.80%   -0.45%  main+0x115                         
     0.05%   -0.04%  main+0x118                         
     0.34%   +0.49%  main+0x11c                         
     2.15%   -0.22%  main+0x120                         
     0.41%   +0.22%  main+0x123                         
     1.86%   +0.04%  main+0x12f                         
     3.86%   -0.69%  main+0x133                         
     0.02%           main+0x137                         
     3.80%   -1.19%  main+0x13d                         
     0.26%   +0.45%  main+0x141                         
     2.26%   +1.41%  main+0x145                         
     8.78%   -1.59%  main+0x148                         
     0.05%           main+0x14c                         
     1.40%   -0.26%  main+0x155                         
     0.07%           main+0x158                         
     0.74%   -0.03%  main+0x15b                         
     1.06%   -0.17%  main+0x160                         
     0.31%   +0.30%  main+0x1a8                         
     1.82%   -0.51%  main+0x1af                         
     0.09%   +0.07%  main+0x1b1                         
     0.05%           main+0x1b4                         

could we add something like '-s symstr' to do
only symbol string comparison, so the previous
output would gather in single line like:

     5.09%   +2.07%  main


otherwise the patchset looks ok to me:
  Acked-by: Jiri Olsa <jo...@kernel.org>


thanks,
jirka
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to