Lines Matching full:map

7 #include "map.h"
13 static void __maps__insert(struct maps *maps, struct map *map);
35 void maps__insert(struct maps *maps, struct map *map) in maps__insert() argument
38 __maps__insert(maps, map); in maps__insert()
41 if (map->dso && map->dso->kernel) { in maps__insert()
42 struct kmap *kmap = map__kmap(map); in maps__insert()
47 pr_err("Internal error: kernel dso with non kernel map\n"); in maps__insert()
53 * inserted map and resort. in maps__insert()
58 struct map **maps_by_name = realloc(maps->maps_by_name, nr_allocate * sizeof(map)); in maps__insert()
69 maps->maps_by_name[maps->nr_maps - 1] = map; in maps__insert()
75 static void __maps__remove(struct maps *maps, struct map *map) in __maps__remove() argument
77 rb_erase_init(&map->rb_node, &maps->entries); in __maps__remove()
78 map__put(map); in __maps__remove()
81 void maps__remove(struct maps *maps, struct map *map) in maps__remove() argument
84 if (maps->last_search_by_name == map) in maps__remove()
87 __maps__remove(maps, map); in maps__remove()
96 struct map *pos, *next; in __maps__purge()
139 struct symbol *maps__find_symbol(struct maps *maps, u64 addr, struct map **mapp) in maps__find_symbol()
141 struct map *map = maps__find(maps, addr); in maps__find_symbol() local
143 /* Ensure map is loaded before using map->map_ip */ in maps__find_symbol()
144 if (map != NULL && map__load(map) >= 0) { in maps__find_symbol()
146 *mapp = map; in maps__find_symbol()
147 return map__find_symbol(map, map->map_ip(map, addr)); in maps__find_symbol()
153 struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name, struct map **mapp) in maps__find_symbol_by_name()
156 struct map *pos; in maps__find_symbol_by_name()
182 if (ams->addr < ams->ms.map->start || ams->addr >= ams->ms.map->end) { in maps__find_ams()
185 ams->ms.map = maps__find(maps, ams->addr); in maps__find_ams()
186 if (ams->ms.map == NULL) in maps__find_ams()
190 ams->al_addr = ams->ms.map->map_ip(ams->ms.map, ams->addr); in maps__find_ams()
191 ams->ms.sym = map__find_symbol(ams->ms.map, ams->al_addr); in maps__find_ams()
199 struct map *pos; in maps__fprintf()
204 printed += fprintf(fp, "Map:"); in maps__fprintf()
217 int maps__fixup_overlappings(struct maps *maps, struct map *map, FILE *fp) in maps__fixup_overlappings() argument
228 * Find first map where end > map->start. in maps__fixup_overlappings()
234 struct map *pos = rb_entry(next, struct map, rb_node); in maps__fixup_overlappings()
236 if (pos->end > map->start) { in maps__fixup_overlappings()
238 if (pos->start <= map->start) in maps__fixup_overlappings()
247 struct map *pos = rb_entry(next, struct map, rb_node); in maps__fixup_overlappings()
251 * Stop if current map starts after map->end. in maps__fixup_overlappings()
254 if (pos->start >= map->end) in maps__fixup_overlappings()
261 map->dso->name); in maps__fixup_overlappings()
264 map__fprintf(map, fp); in maps__fixup_overlappings()
272 * overlapped by the new map: in maps__fixup_overlappings()
274 if (map->start > pos->start) { in maps__fixup_overlappings()
275 struct map *before = map__clone(pos); in maps__fixup_overlappings()
282 before->end = map->start; in maps__fixup_overlappings()
289 if (map->end < pos->end) { in maps__fixup_overlappings()
290 struct map *after = map__clone(pos); in maps__fixup_overlappings()
297 after->start = map->end; in maps__fixup_overlappings()
298 after->pgoff += map->end - pos->start; in maps__fixup_overlappings()
299 assert(pos->map_ip(pos, map->end) == after->map_ip(after, map->end)); in maps__fixup_overlappings()
325 struct map *map; in maps__clone() local
329 maps__for_each_entry(parent, map) { in maps__clone()
330 struct map *new = map__clone(map); in maps__clone()
351 static void __maps__insert(struct maps *maps, struct map *map) in __maps__insert() argument
355 const u64 ip = map->start; in __maps__insert()
356 struct map *m; in __maps__insert()
360 m = rb_entry(parent, struct map, rb_node); in __maps__insert()
367 rb_link_node(&map->rb_node, parent, p); in __maps__insert()
368 rb_insert_color(&map->rb_node, &maps->entries); in __maps__insert()
369 map__get(map); in __maps__insert()
372 struct map *maps__find(struct maps *maps, u64 ip) in maps__find()
375 struct map *m; in maps__find()
381 m = rb_entry(p, struct map, rb_node); in maps__find()
396 struct map *maps__first(struct maps *maps) in maps__first()
401 return rb_entry(first, struct map, rb_node); in maps__first()