diff options
| -rw-r--r-- | tools/perf/util/map.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index 36d0763311ef..6a6929f208b4 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c | |||
| @@ -576,6 +576,13 @@ struct symbol *map_groups__find_symbol(struct map_groups *mg, | |||
| 576 | return NULL; | 576 | return NULL; |
| 577 | } | 577 | } |
| 578 | 578 | ||
| 579 | static bool map__contains_symbol(struct map *map, struct symbol *sym) | ||
| 580 | { | ||
| 581 | u64 ip = map->unmap_ip(map, sym->start); | ||
| 582 | |||
| 583 | return ip >= map->start && ip < map->end; | ||
| 584 | } | ||
| 585 | |||
| 579 | struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name, | 586 | struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name, |
| 580 | struct map **mapp) | 587 | struct map **mapp) |
| 581 | { | 588 | { |
| @@ -591,6 +598,10 @@ struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name, | |||
| 591 | 598 | ||
| 592 | if (sym == NULL) | 599 | if (sym == NULL) |
| 593 | continue; | 600 | continue; |
| 601 | if (!map__contains_symbol(pos, sym)) { | ||
| 602 | sym = NULL; | ||
| 603 | continue; | ||
| 604 | } | ||
| 594 | if (mapp != NULL) | 605 | if (mapp != NULL) |
| 595 | *mapp = pos; | 606 | *mapp = pos; |
| 596 | goto out; | 607 | goto out; |
