• Home
  • Raw
  • Download

Lines Matching refs:maps

28 static void __maps__insert(struct maps *maps, struct map *map);
523 void maps__init(struct maps *maps, struct machine *machine) in maps__init() argument
525 maps->entries = RB_ROOT; in maps__init()
526 init_rwsem(&maps->lock); in maps__init()
527 maps->machine = machine; in maps__init()
528 maps->last_search_by_name = NULL; in maps__init()
529 maps->nr_maps = 0; in maps__init()
530 maps->maps_by_name = NULL; in maps__init()
531 refcount_set(&maps->refcnt, 1); in maps__init()
534 static void __maps__free_maps_by_name(struct maps *maps) in __maps__free_maps_by_name() argument
539 zfree(&maps->maps_by_name); in __maps__free_maps_by_name()
540 maps->nr_maps_allocated = 0; in __maps__free_maps_by_name()
543 void maps__insert(struct maps *maps, struct map *map) in maps__insert() argument
545 down_write(&maps->lock); in maps__insert()
546 __maps__insert(maps, map); in maps__insert()
547 ++maps->nr_maps; in maps__insert()
553 kmap->kmaps = maps; in maps__insert()
563 if (maps->maps_by_name) { in maps__insert()
564 if (maps->nr_maps > maps->nr_maps_allocated) { in maps__insert()
565 int nr_allocate = maps->nr_maps * 2; in maps__insert()
566 struct map **maps_by_name = realloc(maps->maps_by_name, nr_allocate * sizeof(map)); in maps__insert()
569 __maps__free_maps_by_name(maps); in maps__insert()
570 up_write(&maps->lock); in maps__insert()
574 maps->maps_by_name = maps_by_name; in maps__insert()
575 maps->nr_maps_allocated = nr_allocate; in maps__insert()
577 maps->maps_by_name[maps->nr_maps - 1] = map; in maps__insert()
578 __maps__sort_by_name(maps); in maps__insert()
580 up_write(&maps->lock); in maps__insert()
583 static void __maps__remove(struct maps *maps, struct map *map) in __maps__remove() argument
585 rb_erase_init(&map->rb_node, &maps->entries); in __maps__remove()
589 void maps__remove(struct maps *maps, struct map *map) in maps__remove() argument
591 down_write(&maps->lock); in maps__remove()
592 if (maps->last_search_by_name == map) in maps__remove()
593 maps->last_search_by_name = NULL; in maps__remove()
595 __maps__remove(maps, map); in maps__remove()
596 --maps->nr_maps; in maps__remove()
597 if (maps->maps_by_name) in maps__remove()
598 __maps__free_maps_by_name(maps); in maps__remove()
599 up_write(&maps->lock); in maps__remove()
602 static void __maps__purge(struct maps *maps) in __maps__purge() argument
606 maps__for_each_entry_safe(maps, pos, next) { in __maps__purge()
607 rb_erase_init(&pos->rb_node, &maps->entries); in __maps__purge()
612 void maps__exit(struct maps *maps) in maps__exit() argument
614 down_write(&maps->lock); in maps__exit()
615 __maps__purge(maps); in maps__exit()
616 up_write(&maps->lock); in maps__exit()
619 bool maps__empty(struct maps *maps) in maps__empty() argument
621 return !maps__first(maps); in maps__empty()
624 struct maps *maps__new(struct machine *machine) in maps__new()
626 struct maps *maps = zalloc(sizeof(*maps)); in maps__new() local
628 if (maps != NULL) in maps__new()
629 maps__init(maps, machine); in maps__new()
631 return maps; in maps__new()
634 void maps__delete(struct maps *maps) in maps__delete() argument
636 maps__exit(maps); in maps__delete()
637 unwind__finish_access(maps); in maps__delete()
638 free(maps); in maps__delete()
641 void maps__put(struct maps *maps) in maps__put() argument
643 if (maps && refcount_dec_and_test(&maps->refcnt)) in maps__put()
644 maps__delete(maps); in maps__put()
647 struct symbol *maps__find_symbol(struct maps *maps, u64 addr, struct map **mapp) in maps__find_symbol() argument
649 struct map *map = maps__find(maps, addr); in maps__find_symbol()
668 struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name, struct map **mapp) in maps__find_symbol_by_name() argument
673 down_read(&maps->lock); in maps__find_symbol_by_name()
675 maps__for_each_entry(maps, pos) { in maps__find_symbol_by_name()
691 up_read(&maps->lock); in maps__find_symbol_by_name()
695 int maps__find_ams(struct maps *maps, struct addr_map_symbol *ams) in maps__find_ams() argument
698 if (maps == NULL) in maps__find_ams()
700 ams->ms.map = maps__find(maps, ams->addr); in maps__find_ams()
711 size_t maps__fprintf(struct maps *maps, FILE *fp) in maps__fprintf() argument
716 down_read(&maps->lock); in maps__fprintf()
718 maps__for_each_entry(maps, pos) { in maps__fprintf()
727 up_read(&maps->lock); in maps__fprintf()
732 int maps__fixup_overlappings(struct maps *maps, struct map *map, FILE *fp) in maps__fixup_overlappings() argument
738 down_write(&maps->lock); in maps__fixup_overlappings()
740 root = &maps->entries; in maps__fixup_overlappings()
798 __maps__insert(maps, before); in maps__fixup_overlappings()
815 __maps__insert(maps, after); in maps__fixup_overlappings()
829 up_write(&maps->lock); in maps__fixup_overlappings()
836 int maps__clone(struct thread *thread, struct maps *parent) in maps__clone()
838 struct maps *maps = thread->maps; in maps__clone() local
852 err = unwind__prepare_access(maps, new, NULL); in maps__clone()
856 maps__insert(maps, new); in maps__clone()
866 static void __maps__insert(struct maps *maps, struct map *map) in __maps__insert() argument
868 struct rb_node **p = &maps->entries.rb_node; in __maps__insert()
883 rb_insert_color(&map->rb_node, &maps->entries); in __maps__insert()
887 struct map *maps__find(struct maps *maps, u64 ip) in maps__find() argument
892 down_read(&maps->lock); in maps__find()
894 p = maps->entries.rb_node; in maps__find()
907 up_read(&maps->lock); in maps__find()
911 struct map *maps__first(struct maps *maps) in maps__first() argument
913 struct rb_node *first = rb_first(&maps->entries); in maps__first()
950 struct maps *map__kmaps(struct map *map) in map__kmaps()