Lines Matching full:map
12 #include "map.h"
105 static void map__init(struct map *map, u64 start, u64 end, u64 pgoff, in map__init() argument
108 map__set_start(map, start); in map__init()
109 map__set_end(map, end); in map__init()
110 map__set_pgoff(map, pgoff); in map__init()
111 assert(map__reloc(map) == 0); in map__init()
112 map__set_dso(map, dso__get(dso)); in map__init()
113 refcount_set(map__refcnt(map), 1); in map__init()
114 RC_CHK_ACCESS(map)->prot = prot; in map__init()
115 RC_CHK_ACCESS(map)->flags = flags; in map__init()
116 map__set_mapping_type(map, MAPPING_TYPE__DSO); in map__init()
117 assert(map__erange_warned(map) == false); in map__init()
118 assert(map__priv(map) == false); in map__init()
119 assert(map__hit(map) == false); in map__init()
122 struct map *map__new(struct machine *machine, u64 start, u64 len, in map__new()
127 struct map *result; in map__new()
128 RC_STRUCT(map) *map; in map__new()
132 map = zalloc(sizeof(*map)); in map__new()
133 if (ADD_RC_CHK(result, map)) { in map__new()
146 "/tmp/perf-%d.map", nsinfo__pid(nsi)); in map__new()
178 map->mapping_type = MAPPING_TYPE__IDENTITY; in map__new()
222 struct map *map__new2(u64 start, struct dso *dso) in map__new2()
224 struct map *result; in map__new2()
225 RC_STRUCT(map) *map; in map__new2()
227 map = calloc(1, sizeof(*map) + (dso__kernel(dso) ? sizeof(struct kmap) : 0)); in map__new2()
228 if (ADD_RC_CHK(result, map)) { in map__new2()
236 bool __map__is_kernel(const struct map *map) in __map__is_kernel() argument
238 if (!dso__kernel(map__dso(map))) in __map__is_kernel()
240 return machine__kernel_map(maps__machine(map__kmaps((struct map *)map))) == map; in __map__is_kernel()
243 bool __map__is_extra_kernel_map(const struct map *map) in __map__is_extra_kernel_map() argument
245 struct kmap *kmap = __map__kmap((struct map *)map); in __map__is_extra_kernel_map()
250 bool __map__is_bpf_prog(const struct map *map) in __map__is_bpf_prog() argument
253 struct dso *dso = map__dso(map); in __map__is_bpf_prog()
267 bool __map__is_bpf_image(const struct map *map) in __map__is_bpf_image() argument
270 struct dso *dso = map__dso(map); in __map__is_bpf_image()
284 bool __map__is_ool(const struct map *map) in __map__is_ool() argument
286 const struct dso *dso = map__dso(map); in __map__is_ool()
291 bool map__has_symbols(const struct map *map) in map__has_symbols() argument
293 return dso__has_symbols(map__dso(map)); in map__has_symbols()
296 static void map__exit(struct map *map) in map__exit() argument
298 BUG_ON(refcount_read(map__refcnt(map)) != 0); in map__exit()
299 dso__zput(RC_CHK_ACCESS(map)->dso); in map__exit()
302 void map__delete(struct map *map) in map__delete() argument
304 map__exit(map); in map__delete()
305 RC_CHK_FREE(map); in map__delete()
308 void map__put(struct map *map) in map__put() argument
310 if (map && refcount_dec_and_test(map__refcnt(map))) in map__put()
311 map__delete(map); in map__put()
313 RC_CHK_PUT(map); in map__put()
316 void map__fixup_start(struct map *map) in map__fixup_start() argument
318 struct dso *dso = map__dso(map); in map__fixup_start()
325 map__set_start(map, sym->start); in map__fixup_start()
329 void map__fixup_end(struct map *map) in map__fixup_end() argument
331 struct dso *dso = map__dso(map); in map__fixup_end()
337 map__set_end(map, sym->end); in map__fixup_end()
343 int map__load(struct map *map) in map__load() argument
345 struct dso *dso = map__dso(map); in map__load()
352 nr = dso__load(dso, map); in map__load()
384 struct symbol *map__find_symbol(struct map *map, u64 addr) in map__find_symbol() argument
386 if (map__load(map) < 0) in map__find_symbol()
389 return dso__find_symbol(map__dso(map), addr); in map__find_symbol()
392 struct symbol *map__find_symbol_by_name_idx(struct map *map, const char *name, size_t *idx) in map__find_symbol_by_name_idx() argument
396 if (map__load(map) < 0) in map__find_symbol_by_name_idx()
399 dso = map__dso(map); in map__find_symbol_by_name_idx()
405 struct symbol *map__find_symbol_by_name(struct map *map, const char *name) in map__find_symbol_by_name() argument
409 return map__find_symbol_by_name_idx(map, name, &idx); in map__find_symbol_by_name()
412 struct map *map__clone(struct map *from) in map__clone()
414 struct map *result; in map__clone()
415 RC_STRUCT(map) *map; in map__clone()
416 size_t size = sizeof(RC_STRUCT(map)); in map__clone()
422 map = memdup(RC_CHK_ACCESS(from), size); in map__clone()
423 if (ADD_RC_CHK(result, map)) { in map__clone()
424 refcount_set(&map->refcnt, 1); in map__clone()
425 map->dso = dso__get(dso); in map__clone()
431 size_t map__fprintf(struct map *map, FILE *fp) in map__fprintf() argument
433 const struct dso *dso = map__dso(map); in map__fprintf()
436 map__start(map), map__end(map), map__pgoff(map), dso__name(dso)); in map__fprintf()
446 static size_t __map__fprintf_dsoname(struct map *map, bool print_off, FILE *fp) in __map__fprintf_dsoname() argument
450 const struct dso *dso = map ? map__dso(map) : NULL; in __map__fprintf_dsoname()
467 size_t map__fprintf_dsoname(struct map *map, FILE *fp) in map__fprintf_dsoname() argument
469 return __map__fprintf_dsoname(map, false, fp); in map__fprintf_dsoname()
472 size_t map__fprintf_dsoname_dsoff(struct map *map, bool print_off, u64 addr, FILE *fp) in map__fprintf_dsoname_dsoff() argument
474 const struct dso *dso = map ? map__dso(map) : NULL; in map__fprintf_dsoname_dsoff()
480 printed += __map__fprintf_dsoname(map, print_off, fp); in map__fprintf_dsoname_dsoff()
488 char *map__srcline(struct map *map, u64 addr, struct symbol *sym) in map__srcline() argument
490 if (map == NULL) in map__srcline()
493 return get_srcline(map__dso(map), map__rip_2objdump(map, addr), sym, true, true, addr); in map__srcline()
496 int map__fprintf_srcline(struct map *map, u64 addr, const char *prefix, in map__fprintf_srcline() argument
499 const struct dso *dso = map ? map__dso(map) : NULL; in map__fprintf_srcline()
503 char *srcline = map__srcline(map, addr, NULL); in map__fprintf_srcline()
519 * @map: memory map
523 * map->dso->adjust_symbols==1 for ET_EXEC-like cases except ET_REL which is
528 u64 map__rip_2objdump(struct map *map, u64 rip) in map__rip_2objdump() argument
530 struct kmap *kmap = __map__kmap(map); in map__rip_2objdump()
531 const struct dso *dso = map__dso(map); in map__rip_2objdump()
536 * main kernel map, so just use that instead. in map__rip_2objdump()
542 struct map *kernel_map = machine__kernel_map(machine); in map__rip_2objdump()
545 map = kernel_map; in map__rip_2objdump()
553 return rip - map__pgoff(map); in map__rip_2objdump()
558 return map__unmap_ip(map, rip) - map__reloc(map); in map__rip_2objdump()
563 * @map: memory map
567 * objdump and converts it to a memory address. Note this assumes that @map
569 * e.g. map__rip_2objdump(map__map_ip(map, map__objdump_2mem(map, ip))) == ip
573 u64 map__objdump_2mem(struct map *map, u64 ip) in map__objdump_2mem() argument
575 const struct dso *dso = map__dso(map); in map__objdump_2mem()
578 return map__unmap_ip(map, ip); in map__objdump_2mem()
581 return map__unmap_ip(map, ip + map__pgoff(map)); in map__objdump_2mem()
584 return map__unmap_ip(map, ip - dso__text_offset(dso)); in map__objdump_2mem()
586 return ip + map__reloc(map); in map__objdump_2mem()
590 u64 map__objdump_2rip(struct map *map, u64 ip) in map__objdump_2rip() argument
592 const struct dso *dso = map__dso(map); in map__objdump_2rip()
598 return ip + map__pgoff(map); in map__objdump_2rip()
603 return map__map_ip(map, ip + map__reloc(map)); in map__objdump_2rip()
606 bool map__contains_symbol(const struct map *map, const struct symbol *sym) in map__contains_symbol() argument
608 u64 ip = map__unmap_ip(map, sym->start); in map__contains_symbol()
610 return ip >= map__start(map) && ip < map__end(map); in map__contains_symbol()
613 struct kmap *__map__kmap(struct map *map) in __map__kmap() argument
615 const struct dso *dso = map__dso(map); in __map__kmap()
619 return (struct kmap *)(&RC_CHK_ACCESS(map)[1]); in __map__kmap()
622 struct kmap *map__kmap(struct map *map) in map__kmap() argument
624 struct kmap *kmap = __map__kmap(map); in map__kmap()
627 pr_err("Internal error: map__kmap with a non-kernel map\n"); in map__kmap()
631 struct maps *map__kmaps(struct map *map) in map__kmaps() argument
633 struct kmap *kmap = map__kmap(map); in map__kmaps()
636 pr_err("Internal error: map__kmaps with a non-kernel map\n"); in map__kmaps()