| 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | #ifndef __PERF_MAPS_H |
| 3 | #define __PERF_MAPS_H |
| 4 | |
| 5 | #include <linux/refcount.h> |
| 6 | #include <stdio.h> |
| 7 | #include <stdbool.h> |
| 8 | #include <linux/types.h> |
| 9 | |
| 10 | struct ref_reloc_sym; |
| 11 | struct machine; |
| 12 | struct map; |
| 13 | struct maps; |
| 14 | |
| 15 | #define KMAP_NAME_LEN 256 |
| 16 | |
| 17 | struct kmap { |
| 18 | struct ref_reloc_sym *ref_reloc_sym; |
| 19 | struct maps *kmaps; |
| 20 | char name[KMAP_NAME_LEN]; |
| 21 | }; |
| 22 | |
| 23 | struct maps *maps__new(struct machine *machine); |
| 24 | bool maps__empty(struct maps *maps); |
| 25 | int maps__copy_from(struct maps *maps, struct maps *parent); |
| 26 | |
| 27 | struct maps *maps__get(struct maps *maps); |
| 28 | void maps__put(struct maps *maps); |
| 29 | |
| 30 | static inline void __maps__zput(struct maps **map) |
| 31 | { |
| 32 | maps__put(maps: *map); |
| 33 | *map = NULL; |
| 34 | } |
| 35 | |
| 36 | #define maps__zput(map) __maps__zput(&map) |
| 37 | |
| 38 | bool maps__equal(struct maps *a, struct maps *b); |
| 39 | |
| 40 | /* Iterate over map calling cb for each entry. */ |
| 41 | int maps__for_each_map(struct maps *maps, int (*cb)(struct map *map, void *data), void *data); |
| 42 | /* Iterate over map removing an entry if cb returns true. */ |
| 43 | void maps__remove_maps(struct maps *maps, bool (*cb)(struct map *map, void *data), void *data); |
| 44 | |
| 45 | struct machine *maps__machine(const struct maps *maps); |
| 46 | unsigned int maps__nr_maps(const struct maps *maps); /* Test only. */ |
| 47 | refcount_t *maps__refcnt(struct maps *maps); /* Test only. */ |
| 48 | |
| 49 | #ifdef HAVE_LIBUNWIND_SUPPORT |
| 50 | void *maps__addr_space(const struct maps *maps); |
| 51 | void maps__set_addr_space(struct maps *maps, void *addr_space); |
| 52 | const struct unwind_libunwind_ops *maps__unwind_libunwind_ops(const struct maps *maps); |
| 53 | void maps__set_unwind_libunwind_ops(struct maps *maps, const struct unwind_libunwind_ops *ops); |
| 54 | #endif |
| 55 | |
| 56 | size_t maps__fprintf(struct maps *maps, FILE *fp); |
| 57 | |
| 58 | int maps__insert(struct maps *maps, struct map *map); |
| 59 | void maps__remove(struct maps *maps, struct map *map); |
| 60 | |
| 61 | struct map *maps__find(struct maps *maps, u64 addr); |
| 62 | struct symbol *maps__find_symbol(struct maps *maps, u64 addr, struct map **mapp); |
| 63 | struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name, struct map **mapp); |
| 64 | |
| 65 | struct addr_map_symbol; |
| 66 | |
| 67 | int maps__find_ams(struct maps *maps, struct addr_map_symbol *ams); |
| 68 | |
| 69 | int maps__fixup_overlap_and_insert(struct maps *maps, struct map *new); |
| 70 | |
| 71 | struct map *maps__find_by_name(struct maps *maps, const char *name); |
| 72 | |
| 73 | struct map *maps__find_next_entry(struct maps *maps, struct map *map); |
| 74 | |
| 75 | int maps__merge_in(struct maps *kmaps, struct map *new_map); |
| 76 | |
| 77 | void maps__fixup_end(struct maps *maps); |
| 78 | |
| 79 | void maps__load_first(struct maps *maps); |
| 80 | |
| 81 | #endif // __PERF_MAPS_H |
| 82 | |