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