1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#ifndef __PERF_MAP_H 2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define __PERF_MAP_H 3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_BEGIN */ 5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#if 0 6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/compiler.h> 7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/list.h> 8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/rbtree.h> 9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else 10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/compiler.h" 11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/list.h" 12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/rbtree.h" 13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif 14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_END */ 15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdio.h> 16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdbool.h> 17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "types.h" 18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengenum map_type { 20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng MAP__FUNCTION = 0, 21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng MAP__VARIABLE, 22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}; 23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define MAP__NR_TYPES (MAP__VARIABLE + 1) 25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengextern const char *map_type__name[MAP__NR_TYPES]; 27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct dso; 29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct ref_reloc_sym; 30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map_groups; 31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct machine; 32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map { 34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng union { 35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct rb_node rb_node; 36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct list_head node; 37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng }; 38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 start; 39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 end; 40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u8 /* enum map_type */ type; 41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng bool referenced; 42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u32 priv; 43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 pgoff; 44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng /* ip -> dso rip */ 46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 (*map_ip)(struct map *, u64); 47e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng /* dso rip -> ip */ 48e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 (*unmap_ip)(struct map *, u64); 49e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 50e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct dso *dso; 51e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map_groups *groups; 52e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}; 53e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 54e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct kmap { 55e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct ref_reloc_sym *ref_reloc_sym; 56e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map_groups *kmaps; 57e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}; 58e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 59e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map_groups { 60e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct rb_root maps[MAP__NR_TYPES]; 61e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct list_head removed_maps[MAP__NR_TYPES]; 62e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct machine *machine; 63e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}; 64e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 65e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* Native host kernel uses -1 as pid index in machine */ 66e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define HOST_KERNEL_ID (-1) 67e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#define DEFAULT_GUEST_KERNEL_ID (0) 68e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 69e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct machine { 70e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct rb_node rb_node; 71e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng pid_t pid; 72e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng char *root_dir; 73e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct list_head user_dsos; 74e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct list_head kernel_dsos; 75e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map_groups kmaps; 76e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map *vmlinux_maps[MAP__NR_TYPES]; 77e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}; 78e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 79e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline 80e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map *machine__kernel_map(struct machine *self, enum map_type type) 81e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 82e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return self->vmlinux_maps[type]; 83e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 84e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 85e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline struct kmap *map__kmap(struct map *self) 86e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 87e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return (struct kmap *)(self + 1); 88e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 89e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 90e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline u64 map__map_ip(struct map *map, u64 ip) 91e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 92e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return ip - map->start + map->pgoff; 93e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 94e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 95e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline u64 map__unmap_ip(struct map *map, u64 ip) 96e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 97e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return ip + map->start - map->pgoff; 98e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 99e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 100e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline u64 identity__map_ip(struct map *map __used, u64 ip) 101e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 102e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return ip; 103e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 104e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 105e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 106e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* rip/ip <-> addr suitable for passing to `objdump --start-address=` */ 107e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengu64 map__rip_2objdump(struct map *map, u64 rip); 108e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengu64 map__objdump_2ip(struct map *map, u64 addr); 109e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 110e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol; 111e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 112e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengtypedef int (*symbol_filter_t)(struct map *map, struct symbol *sym); 113e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 114e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid map__init(struct map *self, enum map_type type, 115e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 start, u64 end, u64 pgoff, struct dso *dso); 116e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map *map__new(struct list_head *dsos__list, u64 start, u64 len, 117e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 pgoff, u32 pid, char *filename, 118e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng enum map_type type); 119e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid map__delete(struct map *self); 120e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map *map__clone(struct map *self); 121e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint map__overlap(struct map *l, struct map *r); 122e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t map__fprintf(struct map *self, FILE *fp); 123e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 124e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint map__load(struct map *self, symbol_filter_t filter); 125e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *map__find_symbol(struct map *self, 126e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng u64 addr, symbol_filter_t filter); 127e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *map__find_symbol_by_name(struct map *self, const char *name, 128e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng symbol_filter_t filter); 129e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid map__fixup_start(struct map *self); 130e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid map__fixup_end(struct map *self); 131e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 132e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid map__reloc_vmlinux(struct map *self); 133e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 134e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t __map_groups__fprintf_maps(struct map_groups *self, 135e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng enum map_type type, int verbose, FILE *fp); 136e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid maps__insert(struct rb_root *maps, struct map *map); 137e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid maps__remove(struct rb_root *self, struct map *map); 138e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map *maps__find(struct rb_root *maps, u64 addr); 139e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid map_groups__init(struct map_groups *self); 140e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid map_groups__exit(struct map_groups *self); 141e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint map_groups__clone(struct map_groups *self, 142e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map_groups *parent, enum map_type type); 143e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t map_groups__fprintf(struct map_groups *self, int verbose, FILE *fp); 144e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengsize_t map_groups__fprintf_maps(struct map_groups *self, int verbose, FILE *fp); 145e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 146e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengtypedef void (*machine__process_t)(struct machine *self, void *data); 147e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 148e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid machines__process(struct rb_root *self, machine__process_t process, void *data); 149e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct machine *machines__add(struct rb_root *self, pid_t pid, 150e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng const char *root_dir); 151e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct machine *machines__find_host(struct rb_root *self); 152e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct machine *machines__find(struct rb_root *self, pid_t pid); 153e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct machine *machines__findnew(struct rb_root *self, pid_t pid); 154e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengchar *machine__mmap_name(struct machine *self, char *bf, size_t size); 155e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint machine__init(struct machine *self, const char *root_dir, pid_t pid); 156e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid machine__exit(struct machine *self); 157e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid machine__delete(struct machine *self); 158e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 159e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* 160e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Default guest kernel is defined by parameter --guestkallsyms 161e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * and --guestmodules 162e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */ 163e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline bool machine__is_default_guest(struct machine *self) 164e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 165e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return self ? self->pid == DEFAULT_GUEST_KERNEL_ID : false; 166e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 167e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 168e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline bool machine__is_host(struct machine *self) 169e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 170e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return self ? self->pid == HOST_KERNEL_ID : false; 171e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 172e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 173e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void map_groups__insert(struct map_groups *self, struct map *map) 174e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 175e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng maps__insert(&self->maps[map->type], map); 176e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng map->groups = self; 177e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 178e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 179e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline void map_groups__remove(struct map_groups *self, struct map *map) 180e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 181e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng maps__remove(&self->maps[map->type], map); 182e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 183e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 184e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline struct map *map_groups__find(struct map_groups *self, 185e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng enum map_type type, u64 addr) 186e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 187e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return maps__find(&self->maps[type], addr); 188e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 189e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 190e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *map_groups__find_symbol(struct map_groups *self, 191e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng enum map_type type, u64 addr, 192e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map **mapp, 193e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng symbol_filter_t filter); 194e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 195e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *map_groups__find_symbol_by_name(struct map_groups *self, 196e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng enum map_type type, 197e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng const char *name, 198e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map **mapp, 199e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng symbol_filter_t filter); 200e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 201e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline 202e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *machine__find_kernel_symbol(struct machine *self, 203e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng enum map_type type, u64 addr, 204e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map **mapp, 205e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng symbol_filter_t filter) 206e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 207e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return map_groups__find_symbol(&self->kmaps, type, addr, mapp, filter); 208e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 209e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 210e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline 211e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *machine__find_kernel_function(struct machine *self, u64 addr, 212e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map **mapp, 213e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng symbol_filter_t filter) 214e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 215e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return machine__find_kernel_symbol(self, MAP__FUNCTION, addr, mapp, filter); 216e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 217e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 218e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline 219e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *map_groups__find_function_by_name(struct map_groups *self, 220e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng const char *name, struct map **mapp, 221e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng symbol_filter_t filter) 222e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 223e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return map_groups__find_symbol_by_name(self, MAP__FUNCTION, name, mapp, filter); 224e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 225e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 226e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic inline 227e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct symbol *machine__find_kernel_function_by_name(struct machine *self, 228e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng const char *name, 229e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng struct map **mapp, 230e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng symbol_filter_t filter) 231e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{ 232e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng return map_groups__find_function_by_name(&self->kmaps, name, mapp, 233e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng filter); 234e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng} 235e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 236e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint map_groups__fixup_overlappings(struct map_groups *self, struct map *map, 237e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng int verbose, FILE *fp); 238e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 239e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map *map_groups__find_by_name(struct map_groups *self, 240e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng enum map_type type, const char *name); 241e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstruct map *machine__new_module(struct machine *self, u64 start, const char *filename); 242e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 243e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid map_groups__flush(struct map_groups *self); 244e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 245e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif /* __PERF_MAP_H */ 246