• Home
  • Raw
  • Download

Lines Matching refs:map

125 void map__init(struct map *map, enum map_type type,  in map__init()  argument
128 map->type = type; in map__init()
129 map->start = start; in map__init()
130 map->end = end; in map__init()
131 map->pgoff = pgoff; in map__init()
132 map->reloc = 0; in map__init()
133 map->dso = dso; in map__init()
134 map->map_ip = map__map_ip; in map__init()
135 map->unmap_ip = map__unmap_ip; in map__init()
136 RB_CLEAR_NODE(&map->rb_node); in map__init()
137 map->groups = NULL; in map__init()
138 map->referenced = false; in map__init()
139 map->erange_warned = false; in map__init()
142 struct map *map__new(struct machine *machine, u64 start, u64 len, in map__new()
147 struct map *map = malloc(sizeof(*map)); in map__new() local
149 if (map != NULL) { in map__new()
159 map->maj = d_maj; in map__new()
160 map->min = d_min; in map__new()
161 map->ino = ino; in map__new()
162 map->ino_generation = ino_gen; in map__new()
163 map->prot = prot; in map__new()
164 map->flags = flags; in map__new()
185 map__init(map, type, start, start + len, pgoff, dso); in map__new()
188 map->map_ip = map->unmap_ip = identity__map_ip; in map__new()
196 dso__set_loaded(dso, map->type); in map__new()
199 return map; in map__new()
201 free(map); in map__new()
210 struct map *map__new2(u64 start, struct dso *dso, enum map_type type) in map__new2()
212 struct map *map = calloc(1, (sizeof(*map) + in map__new2() local
214 if (map != NULL) { in map__new2()
218 map__init(map, type, start, 0, 0, dso); in map__new2()
221 return map; in map__new2()
224 void map__delete(struct map *map) in map__delete() argument
226 free(map); in map__delete()
229 void map__fixup_start(struct map *map) in map__fixup_start() argument
231 struct rb_root *symbols = &map->dso->symbols[map->type]; in map__fixup_start()
235 map->start = sym->start; in map__fixup_start()
239 void map__fixup_end(struct map *map) in map__fixup_end() argument
241 struct rb_root *symbols = &map->dso->symbols[map->type]; in map__fixup_end()
245 map->end = sym->end; in map__fixup_end()
251 int map__load(struct map *map, symbol_filter_t filter) in map__load() argument
253 const char *name = map->dso->long_name; in map__load()
256 if (dso__loaded(map->dso, map->type)) in map__load()
259 nr = dso__load(map->dso, map, filter); in map__load()
261 if (map->dso->has_build_id) { in map__load()
264 build_id__sprintf(map->dso->build_id, in map__load()
265 sizeof(map->dso->build_id), in map__load()
295 struct symbol *map__find_symbol(struct map *map, u64 addr, in map__find_symbol() argument
298 if (map__load(map, filter) < 0) in map__find_symbol()
301 return dso__find_symbol(map->dso, map->type, addr); in map__find_symbol()
304 struct symbol *map__find_symbol_by_name(struct map *map, const char *name, in map__find_symbol_by_name() argument
307 if (map__load(map, filter) < 0) in map__find_symbol_by_name()
310 if (!dso__sorted_by_name(map->dso, map->type)) in map__find_symbol_by_name()
311 dso__sort_by_name(map->dso, map->type); in map__find_symbol_by_name()
313 return dso__find_symbol_by_name(map->dso, map->type, name); in map__find_symbol_by_name()
316 struct map *map__clone(struct map *map) in map__clone() argument
318 return memdup(map, sizeof(*map)); in map__clone()
321 int map__overlap(struct map *l, struct map *r) in map__overlap()
324 struct map *t = l; in map__overlap()
335 size_t map__fprintf(struct map *map, FILE *fp) in map__fprintf() argument
338 map->start, map->end, map->pgoff, map->dso->name); in map__fprintf()
341 size_t map__fprintf_dsoname(struct map *map, FILE *fp) in map__fprintf_dsoname() argument
345 if (map && map->dso && (map->dso->name || map->dso->long_name)) { in map__fprintf_dsoname()
346 if (symbol_conf.show_kernel_path && map->dso->long_name) in map__fprintf_dsoname()
347 dsoname = map->dso->long_name; in map__fprintf_dsoname()
348 else if (map->dso->name) in map__fprintf_dsoname()
349 dsoname = map->dso->name; in map__fprintf_dsoname()
355 int map__fprintf_srcline(struct map *map, u64 addr, const char *prefix, in map__fprintf_srcline() argument
361 if (map && map->dso) { in map__fprintf_srcline()
362 srcline = get_srcline(map->dso, in map__fprintf_srcline()
363 map__rip_2objdump(map, addr)); in map__fprintf_srcline()
382 u64 map__rip_2objdump(struct map *map, u64 rip) in map__rip_2objdump() argument
384 if (!map->dso->adjust_symbols) in map__rip_2objdump()
387 if (map->dso->rel) in map__rip_2objdump()
388 return rip - map->pgoff; in map__rip_2objdump()
390 return map->unmap_ip(map, rip) - map->reloc; in map__rip_2objdump()
405 u64 map__objdump_2mem(struct map *map, u64 ip) in map__objdump_2mem() argument
407 if (!map->dso->adjust_symbols) in map__objdump_2mem()
408 return map->unmap_ip(map, ip); in map__objdump_2mem()
410 if (map->dso->rel) in map__objdump_2mem()
411 return map->unmap_ip(map, ip + map->pgoff); in map__objdump_2mem()
413 return ip + map->reloc; in map__objdump_2mem()
432 struct map *pos = rb_entry(next, struct map, rb_node); in maps__delete()
442 struct map *pos, *n; in maps__delete_removed()
505 struct map *pos = rb_entry(next, struct map, rb_node); in map_groups__flush()
520 struct map **mapp, in map_groups__find_symbol()
523 struct map *map = map_groups__find(mg, type, addr); in map_groups__find_symbol() local
526 if (map != NULL && map__load(map, filter) >= 0) { in map_groups__find_symbol()
528 *mapp = map; in map_groups__find_symbol()
529 return map__find_symbol(map, map->map_ip(map, addr), filter); in map_groups__find_symbol()
538 struct map **mapp, in map_groups__find_symbol_by_name()
544 struct map *pos = rb_entry(nd, struct map, rb_node); in map_groups__find_symbol_by_name()
559 if (ams->addr < ams->map->start || ams->addr >= ams->map->end) { in map_groups__find_ams()
560 if (ams->map->groups == NULL) in map_groups__find_ams()
562 ams->map = map_groups__find(ams->map->groups, ams->map->type, in map_groups__find_ams()
564 if (ams->map == NULL) in map_groups__find_ams()
568 ams->al_addr = ams->map->map_ip(ams->map, ams->addr); in map_groups__find_ams()
569 ams->sym = map__find_symbol(ams->map, ams->al_addr, filter); in map_groups__find_ams()
581 struct map *pos = rb_entry(nd, struct map, rb_node); in __map_groups__fprintf_maps()
604 struct map *pos; in __map_groups__fprintf_removed_maps()
634 int map_groups__fixup_overlappings(struct map_groups *mg, struct map *map, in map_groups__fixup_overlappings() argument
637 struct rb_root *root = &mg->maps[map->type]; in map_groups__fixup_overlappings()
642 struct map *pos = rb_entry(next, struct map, rb_node); in map_groups__fixup_overlappings()
645 if (!map__overlap(pos, map)) in map_groups__fixup_overlappings()
650 map__fprintf(map, fp); in map_groups__fixup_overlappings()
659 if (map->start > pos->start) { in map_groups__fixup_overlappings()
660 struct map *before = map__clone(pos); in map_groups__fixup_overlappings()
667 before->end = map->start; in map_groups__fixup_overlappings()
673 if (map->end < pos->end) { in map_groups__fixup_overlappings()
674 struct map *after = map__clone(pos); in map_groups__fixup_overlappings()
681 after->start = map->end; in map_groups__fixup_overlappings()
691 list_add_tail(&pos->node, &mg->removed_maps[map->type]); in map_groups__fixup_overlappings()
710 struct map *map = rb_entry(nd, struct map, rb_node); in map_groups__clone() local
711 struct map *new = map__clone(map); in map_groups__clone()
719 void maps__insert(struct rb_root *maps, struct map *map) in maps__insert() argument
723 const u64 ip = map->start; in maps__insert()
724 struct map *m; in maps__insert()
728 m = rb_entry(parent, struct map, rb_node); in maps__insert()
735 rb_link_node(&map->rb_node, parent, p); in maps__insert()
736 rb_insert_color(&map->rb_node, maps); in maps__insert()
739 void maps__remove(struct rb_root *maps, struct map *map) in maps__remove() argument
741 rb_erase(&map->rb_node, maps); in maps__remove()
744 struct map *maps__find(struct rb_root *maps, u64 ip) in maps__find()
748 struct map *m; in maps__find()
752 m = rb_entry(parent, struct map, rb_node); in maps__find()
764 struct map *maps__first(struct rb_root *maps) in maps__first()
769 return rb_entry(first, struct map, rb_node); in maps__first()
773 struct map *maps__next(struct map *map) in maps__next() argument
775 struct rb_node *next = rb_next(&map->rb_node); in maps__next()
778 return rb_entry(next, struct map, rb_node); in maps__next()