aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/builtin-report.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index ec230a0146e9..b4e76f75ba87 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -400,9 +400,27 @@ static void thread__insert_map(struct thread *self, struct map *map)
400 400
401 list_for_each_entry_safe(pos, tmp, &self->maps, node) { 401 list_for_each_entry_safe(pos, tmp, &self->maps, node) {
402 if (map__overlap(pos, map)) { 402 if (map__overlap(pos, map)) {
403 list_del_init(&pos->node); 403 if (verbose >= 2) {
404 /* XXX leaks dsos */ 404 printf("overlapping maps:\n");
405 free(pos); 405 map__fprintf(map, stdout);
406 map__fprintf(pos, stdout);
407 }
408
409 if (map->start <= pos->start && map->end > pos->start)
410 pos->start = map->end;
411
412 if (map->end >= pos->end && map->start < pos->end)
413 pos->end = map->start;
414
415 if (verbose >= 2) {
416 printf("after collision:\n");
417 map__fprintf(pos, stdout);
418 }
419
420 if (pos->start >= pos->end) {
421 list_del_init(&pos->node);
422 free(pos);
423 }
406 } 424 }
407 } 425 }
408 426