Lines Matching full:map
12 #include "map.h"
105 void map__init(struct map *map, u64 start, u64 end, u64 pgoff, struct dso *dso) in map__init() argument
107 map__set_start(map, start); in map__init()
108 map__set_end(map, end); in map__init()
109 map__set_pgoff(map, pgoff); in map__init()
110 map__set_reloc(map, 0); in map__init()
111 map__set_dso(map, dso__get(dso)); in map__init()
112 map__set_mapping_type(map, MAPPING_TYPE__DSO); in map__init()
113 map__set_erange_warned(map, false); in map__init()
114 refcount_set(map__refcnt(map), 1); in map__init()
117 struct map *map__new(struct machine *machine, u64 start, u64 len, in map__new()
122 struct map *result; in map__new()
123 RC_STRUCT(map) *map; in map__new()
127 map = malloc(sizeof(*map)); in map__new()
128 if (ADD_RC_CHK(result, map)) { in map__new()
137 map->prot = prot; in map__new()
138 map->flags = flags; in map__new()
143 "/tmp/perf-%d.map", nsinfo__pid(nsi)); in map__new()
174 map->mapping_type = MAPPING_TYPE__IDENTITY; in map__new()
220 struct map *map__new2(u64 start, struct dso *dso) in map__new2()
222 struct map *result; in map__new2()
223 RC_STRUCT(map) *map; in map__new2()
225 map = calloc(1, sizeof(*map) + (dso->kernel ? sizeof(struct kmap) : 0)); in map__new2()
226 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 (!map__dso(map)->kernel) 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); 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()
562 return map__unmap_ip(map, rip) - map__reloc(map); in map__rip_2objdump()
567 * @map: memory map
571 * objdump and converts it to a memory address. Note this assumes that @map
573 * e.g. map__rip_2objdump(map__map_ip(map, map__objdump_2mem(map, ip))) == ip
577 u64 map__objdump_2mem(struct map *map, u64 ip) in map__objdump_2mem() argument
579 const struct dso *dso = map__dso(map); in map__objdump_2mem()
582 return map__unmap_ip(map, ip); in map__objdump_2mem()
585 return map__unmap_ip(map, ip + map__pgoff(map)); in map__objdump_2mem()
592 return map__unmap_ip(map, ip - dso->text_offset); in map__objdump_2mem()
594 return ip + map__reloc(map); in map__objdump_2mem()
597 bool map__contains_symbol(const struct map *map, const struct symbol *sym) in map__contains_symbol() argument
599 u64 ip = map__unmap_ip(map, sym->start); in map__contains_symbol()
601 return ip >= map__start(map) && ip < map__end(map); in map__contains_symbol()
604 struct kmap *__map__kmap(struct map *map) in __map__kmap() argument
606 const struct dso *dso = map__dso(map); in __map__kmap()
610 return (struct kmap *)(&RC_CHK_ACCESS(map)[1]); in __map__kmap()
613 struct kmap *map__kmap(struct map *map) in map__kmap() argument
615 struct kmap *kmap = __map__kmap(map); in map__kmap()
618 pr_err("Internal error: map__kmap with a non-kernel map\n"); in map__kmap()
622 struct maps *map__kmaps(struct map *map) in map__kmaps() argument
624 struct kmap *kmap = map__kmap(map); in map__kmaps()
627 pr_err("Internal error: map__kmaps with a non-kernel map\n"); in map__kmaps()