|
@@ -685,6 +685,8 @@ static enum match_result match_chain(struct callchain_cursor_node *node,
|
|
|
{
|
|
|
struct symbol *sym = node->sym;
|
|
|
u64 left, right;
|
|
|
+ struct dso *left_dso = NULL;
|
|
|
+ struct dso *right_dso = NULL;
|
|
|
|
|
|
if (callchain_param.key == CCKEY_SRCLINE) {
|
|
|
enum match_result match = match_chain_srcline(node, cnode);
|
|
@@ -696,12 +698,14 @@ static enum match_result match_chain(struct callchain_cursor_node *node,
|
|
|
if (cnode->ms.sym && sym && callchain_param.key == CCKEY_FUNCTION) {
|
|
|
left = cnode->ms.sym->start;
|
|
|
right = sym->start;
|
|
|
+ left_dso = cnode->ms.map->dso;
|
|
|
+ right_dso = node->map->dso;
|
|
|
} else {
|
|
|
left = cnode->ip;
|
|
|
right = node->ip;
|
|
|
}
|
|
|
|
|
|
- if (left == right) {
|
|
|
+ if (left == right && left_dso == right_dso) {
|
|
|
if (node->branch) {
|
|
|
cnode->branch_count++;
|
|
|
|