|
21 | 21 | #include "unwind.h" |
22 | 22 |
|
23 | 23 | static void __maps__insert(struct maps *maps, struct map *map); |
| 24 | +static void __maps__insert_name(struct maps *maps, struct map *map); |
24 | 25 |
|
25 | 26 | static inline int is_anon_memory(const char *filename, u32 flags) |
26 | 27 | { |
@@ -496,6 +497,7 @@ u64 map__objdump_2mem(struct map *map, u64 ip) |
496 | 497 | static void maps__init(struct maps *maps) |
497 | 498 | { |
498 | 499 | maps->entries = RB_ROOT; |
| 500 | + maps->names = RB_ROOT; |
499 | 501 | init_rwsem(&maps->lock); |
500 | 502 | } |
501 | 503 |
|
@@ -664,6 +666,7 @@ size_t map_groups__fprintf(struct map_groups *mg, FILE *fp) |
664 | 666 | static void __map_groups__insert(struct map_groups *mg, struct map *map) |
665 | 667 | { |
666 | 668 | __maps__insert(&mg->maps, map); |
| 669 | + __maps__insert_name(&mg->maps, map); |
667 | 670 | map->groups = mg; |
668 | 671 | } |
669 | 672 |
|
@@ -824,10 +827,34 @@ static void __maps__insert(struct maps *maps, struct map *map) |
824 | 827 | map__get(map); |
825 | 828 | } |
826 | 829 |
|
| 830 | +static void __maps__insert_name(struct maps *maps, struct map *map) |
| 831 | +{ |
| 832 | + struct rb_node **p = &maps->names.rb_node; |
| 833 | + struct rb_node *parent = NULL; |
| 834 | + struct map *m; |
| 835 | + int rc; |
| 836 | + |
| 837 | + while (*p != NULL) { |
| 838 | + parent = *p; |
| 839 | + m = rb_entry(parent, struct map, rb_node_name); |
| 840 | + rc = strcmp(m->dso->short_name, map->dso->short_name); |
| 841 | + if (rc < 0) |
| 842 | + p = &(*p)->rb_left; |
| 843 | + else if (rc > 0) |
| 844 | + p = &(*p)->rb_right; |
| 845 | + else |
| 846 | + return; |
| 847 | + } |
| 848 | + rb_link_node(&map->rb_node_name, parent, p); |
| 849 | + rb_insert_color(&map->rb_node_name, &maps->names); |
| 850 | + map__get(map); |
| 851 | +} |
| 852 | + |
827 | 853 | void maps__insert(struct maps *maps, struct map *map) |
828 | 854 | { |
829 | 855 | down_write(&maps->lock); |
830 | 856 | __maps__insert(maps, map); |
| 857 | + __maps__insert_name(maps, map); |
831 | 858 | up_write(&maps->lock); |
832 | 859 | } |
833 | 860 |
|
|
0 commit comments