Lines Matching refs:map
34 void map__init(struct map *map, enum map_type type, in map__init() argument
37 map->type = type; in map__init()
38 map->start = start; in map__init()
39 map->end = end; in map__init()
40 map->pgoff = pgoff; in map__init()
41 map->dso = dso; in map__init()
42 map->map_ip = map__map_ip; in map__init()
43 map->unmap_ip = map__unmap_ip; in map__init()
44 RB_CLEAR_NODE(&map->rb_node); in map__init()
45 map->groups = NULL; in map__init()
46 map->referenced = false; in map__init()
47 map->erange_warned = false; in map__init()
50 struct map *map__new(struct list_head *dsos__list, u64 start, u64 len, in map__new()
55 struct map *map = malloc(sizeof(*map)); in map__new() local
57 if (map != NULL) { in map__new()
66 map->maj = d_maj; in map__new()
67 map->min = d_min; in map__new()
68 map->ino = ino; in map__new()
69 map->ino_generation = ino_gen; in map__new()
85 map__init(map, type, start, start + len, pgoff, dso); in map__new()
88 map->map_ip = map->unmap_ip = identity__map_ip; in map__new()
96 dso__set_loaded(dso, map->type); in map__new()
99 return map; in map__new()
101 free(map); in map__new()
110 struct map *map__new2(u64 start, struct dso *dso, enum map_type type) in map__new2()
112 struct map *map = calloc(1, (sizeof(*map) + in map__new2() local
114 if (map != NULL) { in map__new2()
118 map__init(map, type, start, 0, 0, dso); in map__new2()
121 return map; in map__new2()
124 void map__delete(struct map *map) in map__delete() argument
126 free(map); in map__delete()
129 void map__fixup_start(struct map *map) in map__fixup_start() argument
131 struct rb_root *symbols = &map->dso->symbols[map->type]; in map__fixup_start()
135 map->start = sym->start; in map__fixup_start()
139 void map__fixup_end(struct map *map) in map__fixup_end() argument
141 struct rb_root *symbols = &map->dso->symbols[map->type]; in map__fixup_end()
145 map->end = sym->end; in map__fixup_end()
151 int map__load(struct map *map, symbol_filter_t filter) in map__load() argument
153 const char *name = map->dso->long_name; in map__load()
156 if (dso__loaded(map->dso, map->type)) in map__load()
159 nr = dso__load(map->dso, map, filter); in map__load()
161 if (map->dso->has_build_id) { in map__load()
164 build_id__sprintf(map->dso->build_id, in map__load()
165 sizeof(map->dso->build_id), in map__load()
195 struct symbol *map__find_symbol(struct map *map, u64 addr, in map__find_symbol() argument
198 if (map__load(map, filter) < 0) in map__find_symbol()
201 return dso__find_symbol(map->dso, map->type, addr); in map__find_symbol()
204 struct symbol *map__find_symbol_by_name(struct map *map, const char *name, in map__find_symbol_by_name() argument
207 if (map__load(map, filter) < 0) in map__find_symbol_by_name()
210 if (!dso__sorted_by_name(map->dso, map->type)) in map__find_symbol_by_name()
211 dso__sort_by_name(map->dso, map->type); in map__find_symbol_by_name()
213 return dso__find_symbol_by_name(map->dso, map->type, name); in map__find_symbol_by_name()
216 struct map *map__clone(struct map *map) in map__clone() argument
218 return memdup(map, sizeof(*map)); in map__clone()
221 int map__overlap(struct map *l, struct map *r) in map__overlap()
224 struct map *t = l; in map__overlap()
235 size_t map__fprintf(struct map *map, FILE *fp) in map__fprintf() argument
238 map->start, map->end, map->pgoff, map->dso->name); in map__fprintf()
241 size_t map__fprintf_dsoname(struct map *map, FILE *fp) in map__fprintf_dsoname() argument
245 if (map && map->dso && (map->dso->name || map->dso->long_name)) { in map__fprintf_dsoname()
246 if (symbol_conf.show_kernel_path && map->dso->long_name) in map__fprintf_dsoname()
247 dsoname = map->dso->long_name; in map__fprintf_dsoname()
248 else if (map->dso->name) in map__fprintf_dsoname()
249 dsoname = map->dso->name; in map__fprintf_dsoname()
260 u64 map__rip_2objdump(struct map *map, u64 rip) in map__rip_2objdump() argument
262 if (!map->dso->adjust_symbols) in map__rip_2objdump()
265 if (map->dso->rel) in map__rip_2objdump()
266 return rip - map->pgoff; in map__rip_2objdump()
268 return map->unmap_ip(map, rip); in map__rip_2objdump()
286 struct map *pos = rb_entry(next, struct map, rb_node); in maps__delete()
296 struct map *pos, *n; in maps__delete_removed()
323 struct map *pos = rb_entry(next, struct map, rb_node); in map_groups__flush()
338 struct map **mapp, in map_groups__find_symbol()
341 struct map *map = map_groups__find(mg, type, addr); in map_groups__find_symbol() local
343 if (map != NULL) { in map_groups__find_symbol()
345 *mapp = map; in map_groups__find_symbol()
346 return map__find_symbol(map, map->map_ip(map, addr), filter); in map_groups__find_symbol()
355 struct map **mapp, in map_groups__find_symbol_by_name()
361 struct map *pos = rb_entry(nd, struct map, rb_node); in map_groups__find_symbol_by_name()
381 struct map *pos = rb_entry(nd, struct map, rb_node); in __map_groups__fprintf_maps()
405 struct map *pos; in __map_groups__fprintf_removed_maps()
435 int map_groups__fixup_overlappings(struct map_groups *mg, struct map *map, in map_groups__fixup_overlappings() argument
438 struct rb_root *root = &mg->maps[map->type]; in map_groups__fixup_overlappings()
443 struct map *pos = rb_entry(next, struct map, rb_node); in map_groups__fixup_overlappings()
446 if (!map__overlap(pos, map)) in map_groups__fixup_overlappings()
451 map__fprintf(map, fp); in map_groups__fixup_overlappings()
460 if (map->start > pos->start) { in map_groups__fixup_overlappings()
461 struct map *before = map__clone(pos); in map_groups__fixup_overlappings()
468 before->end = map->start - 1; in map_groups__fixup_overlappings()
474 if (map->end < pos->end) { in map_groups__fixup_overlappings()
475 struct map *after = map__clone(pos); in map_groups__fixup_overlappings()
482 after->start = map->end + 1; in map_groups__fixup_overlappings()
492 list_add_tail(&pos->node, &mg->removed_maps[map->type]); in map_groups__fixup_overlappings()
511 struct map *map = rb_entry(nd, struct map, rb_node); in map_groups__clone() local
512 struct map *new = map__clone(map); in map_groups__clone()
520 void maps__insert(struct rb_root *maps, struct map *map) in maps__insert() argument
524 const u64 ip = map->start; in maps__insert()
525 struct map *m; in maps__insert()
529 m = rb_entry(parent, struct map, rb_node); in maps__insert()
536 rb_link_node(&map->rb_node, parent, p); in maps__insert()
537 rb_insert_color(&map->rb_node, maps); in maps__insert()
540 void maps__remove(struct rb_root *maps, struct map *map) in maps__remove() argument
542 rb_erase(&map->rb_node, maps); in maps__remove()
545 struct map *maps__find(struct rb_root *maps, u64 ip) in maps__find()
549 struct map *m; in maps__find()
553 m = rb_entry(parent, struct map, rb_node); in maps__find()
565 struct map *maps__first(struct rb_root *maps) in maps__first()
570 return rb_entry(first, struct map, rb_node); in maps__first()
574 struct map *maps__next(struct map *map) in maps__next() argument
576 struct rb_node *next = rb_next(&map->rb_node); in maps__next()
579 return rb_entry(next, struct map, rb_node); in maps__next()