]>
git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - tools/perf/util/map.h
4 #include <linux/compiler.h>
5 #include <linux/list.h>
6 #include <linux/rbtree.h>
15 #define MAP__NR_TYPES (MAP__VARIABLE + 1)
17 extern const char *map_type__name
[MAP__NR_TYPES
];
25 struct rb_node rb_node
;
26 struct list_head node
;
34 u64 (*map_ip
)(struct map
*, u64
);
36 u64 (*unmap_ip
)(struct map
*, u64
);
42 struct ref_reloc_sym
*ref_reloc_sym
;
43 struct map_groups
*kmaps
;
46 static inline struct kmap
*map__kmap(struct map
*self
)
48 return (struct kmap
*)(self
+ 1);
51 static inline u64
map__map_ip(struct map
*map
, u64 ip
)
53 return ip
- map
->start
+ map
->pgoff
;
56 static inline u64
map__unmap_ip(struct map
*map
, u64 ip
)
58 return ip
+ map
->start
- map
->pgoff
;
61 static inline u64
identity__map_ip(struct map
*map __used
, u64 ip
)
67 /* rip/ip <-> addr suitable for passing to `objdump --start-address=` */
68 u64
map__rip_2objdump(struct map
*map
, u64 rip
);
69 u64
map__objdump_2ip(struct map
*map
, u64 addr
);
73 typedef int (*symbol_filter_t
)(struct map
*map
, struct symbol
*sym
);
75 void map__init(struct map
*self
, enum map_type type
,
76 u64 start
, u64 end
, u64 pgoff
, struct dso
*dso
);
77 struct map
*map__new(u64 start
, u64 len
, u64 pgoff
, u32 pid
, char *filename
,
78 enum map_type type
, char *cwd
, int cwdlen
);
79 void map__delete(struct map
*self
);
80 struct map
*map__clone(struct map
*self
);
81 int map__overlap(struct map
*l
, struct map
*r
);
82 size_t map__fprintf(struct map
*self
, FILE *fp
);
84 int map__load(struct map
*self
, symbol_filter_t filter
);
85 struct symbol
*map__find_symbol(struct map
*self
,
86 u64 addr
, symbol_filter_t filter
);
87 struct symbol
*map__find_symbol_by_name(struct map
*self
, const char *name
,
88 symbol_filter_t filter
);
89 void map__fixup_start(struct map
*self
);
90 void map__fixup_end(struct map
*self
);
92 void map__reloc_vmlinux(struct map
*self
);
95 struct rb_root maps
[MAP__NR_TYPES
];
96 struct list_head removed_maps
[MAP__NR_TYPES
];
99 size_t __map_groups__fprintf_maps(struct map_groups
*self
,
100 enum map_type type
, FILE *fp
);
101 void maps__insert(struct rb_root
*maps
, struct map
*map
);
102 struct map
*maps__find(struct rb_root
*maps
, u64 addr
);
103 void map_groups__init(struct map_groups
*self
);
104 size_t map_groups__fprintf_maps(struct map_groups
*self
, FILE *fp
);
106 static inline void map_groups__insert(struct map_groups
*self
, struct map
*map
)
108 maps__insert(&self
->maps
[map
->type
], map
);
111 static inline struct map
*map_groups__find(struct map_groups
*self
,
112 enum map_type type
, u64 addr
)
114 return maps__find(&self
->maps
[type
], addr
);
117 struct symbol
*map_groups__find_symbol(struct map_groups
*self
,
118 enum map_type type
, u64 addr
,
119 symbol_filter_t filter
);
121 static inline struct symbol
*map_groups__find_function(struct map_groups
*self
,
123 symbol_filter_t filter
)
125 return map_groups__find_symbol(self
, MAP__FUNCTION
, addr
, filter
);
128 struct map
*map_groups__find_by_name(struct map_groups
*self
,
129 enum map_type type
, const char *name
);
130 int __map_groups__create_kernel_maps(struct map_groups
*self
,
131 struct map
*vmlinux_maps
[MAP__NR_TYPES
],
133 int map_groups__create_kernel_maps(struct map_groups
*self
,
134 struct map
*vmlinux_maps
[MAP__NR_TYPES
]);
135 struct map
*map_groups__new_module(struct map_groups
*self
, u64 start
,
136 const char *filename
);
138 #endif /* __PERF_MAP_H */