Lines Matching full:map

7 #include "map.h"
36 static int __maps__insert(struct maps *maps, struct map *map) in __maps__insert() argument
40 const u64 ip = map__start(map); in __maps__insert()
48 new_rb_node->map = map__get(map); in __maps__insert()
53 if (ip < map__start(m->map)) in __maps__insert()
64 int maps__insert(struct maps *maps, struct map *map) in maps__insert() argument
67 const struct dso *dso = map__dso(map); in maps__insert()
70 err = __maps__insert(maps, map); in maps__insert()
77 struct kmap *kmap = map__kmap(map); in maps__insert()
82 pr_err("Internal error: kernel dso with non kernel map\n"); in maps__insert()
88 * inserted map and resort. in maps__insert()
93 struct map **maps_by_name = realloc(maps__maps_by_name(maps), in maps__insert()
94 nr_allocate * sizeof(map)); in maps__insert()
105 maps__maps_by_name(maps)[maps__nr_maps(maps) - 1] = map__get(map); in maps__insert()
116 map__put(rb_node->map); in __maps__remove()
120 void maps__remove(struct maps *maps, struct map *map) in maps__remove() argument
125 if (RC_CHK_ACCESS(maps)->last_search_by_name == map) in maps__remove()
128 rb_node = maps__find_node(maps, map); in maps__remove()
129 assert(rb_node->RC_CHK_ACCESS(map) == RC_CHK_ACCESS(map)); in maps__remove()
146 map__put(pos->map); in __maps__purge()
199 struct symbol *maps__find_symbol(struct maps *maps, u64 addr, struct map **mapp) in maps__find_symbol()
201 struct map *map = maps__find(maps, addr); in maps__find_symbol() local
203 /* Ensure map is loaded before using map->map_ip */ in maps__find_symbol()
204 if (map != NULL && map__load(map) >= 0) { in maps__find_symbol()
206 *mapp = map; in maps__find_symbol()
207 return map__find_symbol(map, map__map_ip(map, addr)); in maps__find_symbol()
213 struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name, struct map **mapp) in maps__find_symbol_by_name()
221 sym = map__find_symbol_by_name(pos->map, name); in maps__find_symbol_by_name()
225 if (!map__contains_symbol(pos->map, sym)) { in maps__find_symbol_by_name()
230 *mapp = pos->map; in maps__find_symbol_by_name()
242 if (ams->addr < map__start(ams->ms.map) || ams->addr >= map__end(ams->ms.map)) { in maps__find_ams()
245 ams->ms.map = maps__find(maps, ams->addr); in maps__find_ams()
246 if (ams->ms.map == NULL) in maps__find_ams()
250 ams->al_addr = map__map_ip(ams->ms.map, ams->addr); in maps__find_ams()
251 ams->ms.sym = map__find_symbol(ams->ms.map, ams->al_addr); in maps__find_ams()
264 printed += fprintf(fp, "Map:"); in maps__fprintf()
265 printed += map__fprintf(pos->map, fp); in maps__fprintf()
267 printed += dso__fprintf(map__dso(pos->map), fp); in maps__fprintf()
277 int maps__fixup_overlappings(struct maps *maps, struct map *map, FILE *fp) in maps__fixup_overlappings() argument
288 * Find first map where end > map->start. in maps__fixup_overlappings()
296 if (map__end(pos->map) > map__start(map)) { in maps__fixup_overlappings()
298 if (map__start(pos->map) <= map__start(map)) in maps__fixup_overlappings()
311 * Stop if current map starts after map->end. in maps__fixup_overlappings()
314 if (map__start(pos->map) >= map__end(map)) in maps__fixup_overlappings()
321 map__dso(map)->name); in maps__fixup_overlappings()
324 map__fprintf(map, fp); in maps__fixup_overlappings()
325 map__fprintf(pos->map, fp); in maps__fixup_overlappings()
332 * overlapped by the new map: in maps__fixup_overlappings()
334 if (map__start(map) > map__start(pos->map)) { in maps__fixup_overlappings()
335 struct map *before = map__clone(pos->map); in maps__fixup_overlappings()
342 map__set_end(before, map__start(map)); in maps__fixup_overlappings()
354 if (map__end(map) < map__end(pos->map)) { in maps__fixup_overlappings()
355 struct map *after = map__clone(pos->map); in maps__fixup_overlappings()
362 map__set_start(after, map__end(map)); in maps__fixup_overlappings()
363 map__add_pgoff(after, map__end(map) - map__start(pos->map)); in maps__fixup_overlappings()
364 assert(map__map_ip(pos->map, map__end(map)) == in maps__fixup_overlappings()
365 map__map_ip(after, map__end(map))); in maps__fixup_overlappings()
376 map__put(pos->map); in maps__fixup_overlappings()
395 struct map *new = map__clone(rb_node->map); in maps__clone()
419 struct map_rb_node *maps__find_node(struct maps *maps, struct map *map) in maps__find_node() argument
424 if (rb_node->RC_CHK_ACCESS(map) == RC_CHK_ACCESS(map)) in maps__find_node()
430 struct map *maps__find(struct maps *maps, u64 ip) in maps__find()
441 if (ip < map__start(m->map)) in maps__find()
443 else if (ip >= map__end(m->map)) in maps__find()
452 return m ? m->map : NULL; in maps__find()
481 const struct map *map_a = *(const struct map **)a; in map__strcmp()
482 const struct map *map_b = *(const struct map **)b; in map__strcmp()
502 const struct dso *dso = map__dso(*(const struct map **)b); in map__strcmp_name()
509 qsort(maps__maps_by_name(maps), maps__nr_maps(maps), sizeof(struct map *), map__strcmp); in __maps__sort_by_name()
515 struct map **maps_by_name = realloc(maps__maps_by_name(maps), in map__groups__sort_by_name_from_rbtree()
516 maps__nr_maps(maps) * sizeof(struct map *)); in map__groups__sort_by_name_from_rbtree()
529 maps_by_name[i++] = map__get(rb_node->map); in map__groups__sort_by_name_from_rbtree()
539 static struct map *__maps__find_by_name(struct maps *maps, const char *name) in __maps__find_by_name()
541 struct map **mapp; in __maps__find_by_name()
554 struct map *maps__find_by_name(struct maps *maps, const char *name) in maps__find_by_name()
557 struct map *map; in maps__find_by_name() local
566 map = RC_CHK_ACCESS(maps)->last_search_by_name; in maps__find_by_name()
575 map = __maps__find_by_name(maps, name); in maps__find_by_name()
576 if (map || maps__maps_by_name(maps) != NULL) in maps__find_by_name()
583 map = rb_node->map; in maps__find_by_name()
584 dso = map__dso(map); in maps__find_by_name()
586 RC_CHK_ACCESS(maps)->last_search_by_name = map; in maps__find_by_name()
590 map = NULL; in maps__find_by_name()
594 return map; in maps__find_by_name()
604 if (prev != NULL && !map__end(prev->map)) in maps__fixup_end()
605 map__set_end(prev->map, map__start(curr->map)); in maps__fixup_end()
612 * last map final address. in maps__fixup_end()
614 if (curr && !map__end(curr->map)) in maps__fixup_end()
615 map__set_end(curr->map, ~0ULL); in maps__fixup_end()
621 * Merges map into maps by splitting the new map within the existing map
624 int maps__merge_in(struct maps *kmaps, struct map *new_map) in maps__merge_in()
631 struct map *old_map = rb_node->map; in maps__merge_in()
661 m->map = map__clone(new_map); in maps__merge_in()
662 if (!m->map) { in maps__merge_in()
668 map__set_end(m->map, map__start(old_map)); in maps__merge_in()
704 err = maps__insert(kmaps, old_node->map); in maps__merge_in()
705 map__put(old_node->map); in maps__merge_in()