Milian Wolff <milian.wo...@kdab.com> writes:
>  
> +static enum match_result match_address_dso(struct dso *left_dso, u64 left_ip,
> +                                        struct dso *right_dso, u64 right_ip)
> +{
> +     if (left_dso == right_dso && left_ip == right_ip)
> +             return MATCH_EQ;
> +     else if (left_ip < right_ip)
> +             return MATCH_LT;
> +     else
> +             return MATCH_GT;
> +}

So why does only the first case check the dso? Does it not matter
for the others?

Either should be checked by none or by all.


> +     case CCKEY_FUNCTION:
> +             if (node->sym && cnode->ms.sym) {
> +                     /*
> +                      * Compare inlined frames based on their symbol name
> +                      * because different inlined frames will have the same
> +                      * symbol start. Otherwise do a faster comparison based
> +                      * on the symbol start address.
> +                      */
> +                     if (cnode->ms.sym->inlined || node->sym->inlined)
> +                             match = match_chain_strings(cnode->ms.sym->name,
node->sym->name);

So what happens when there are multiple symbols with the same name?

(e.g. local for a DSO or local in a file)

> +                                       node->ip);
> +             } else {
> +                     /*
> +                      * It's "from" of a branch
> +                      */
> +                     cnode->brtype_stat.branch_to = false;
> +                     cnode->cycles_count += node->branch_flags.cycles;
> +                     cnode->iter_count += node->nr_loop_iter;
> +                     cnode->iter_cycles += node->iter_cycles;

I assume you tested the cycle accounting still works?

-Andi

Reply via email to