1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef PERF_SRCLINE_H |
3 | #define PERF_SRCLINE_H |
4 | |
5 | #include <linux/list.h> |
6 | #include <linux/rbtree.h> |
7 | #include <linux/types.h> |
8 | |
9 | struct dso; |
10 | struct symbol; |
11 | |
12 | extern int addr2line_timeout_ms; |
13 | extern bool srcline_full_filename; |
14 | char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym, |
15 | bool show_sym, bool show_addr, u64 ip); |
16 | char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym, |
17 | bool show_sym, bool show_addr, bool unwind_inlines, |
18 | u64 ip); |
19 | void zfree_srcline(char **srcline); |
20 | char *get_srcline_split(struct dso *dso, u64 addr, unsigned *line); |
21 | |
22 | /* insert the srcline into the DSO, which will take ownership */ |
23 | void srcline__tree_insert(struct rb_root_cached *tree, u64 addr, char *srcline); |
24 | /* find previously inserted srcline */ |
25 | char *srcline__tree_find(struct rb_root_cached *tree, u64 addr); |
26 | /* delete all srclines within the tree */ |
27 | void srcline__tree_delete(struct rb_root_cached *tree); |
28 | |
29 | extern char *srcline__unknown; |
30 | #define SRCLINE_UNKNOWN srcline__unknown |
31 | |
32 | struct inline_list { |
33 | struct symbol *symbol; |
34 | char *srcline; |
35 | struct list_head list; |
36 | }; |
37 | |
38 | struct inline_node { |
39 | u64 addr; |
40 | struct list_head val; |
41 | struct rb_node rb_node; |
42 | }; |
43 | |
44 | /* parse inlined frames for the given address */ |
45 | struct inline_node *dso__parse_addr_inlines(struct dso *dso, u64 addr, |
46 | struct symbol *sym); |
47 | /* free resources associated to the inline node list */ |
48 | void inline_node__delete(struct inline_node *node); |
49 | |
50 | /* insert the inline node list into the DSO, which will take ownership */ |
51 | void inlines__tree_insert(struct rb_root_cached *tree, |
52 | struct inline_node *inlines); |
53 | /* find previously inserted inline node list */ |
54 | struct inline_node *inlines__tree_find(struct rb_root_cached *tree, u64 addr); |
55 | /* delete all nodes within the tree of inline_node s */ |
56 | void inlines__tree_delete(struct rb_root_cached *tree); |
57 | |
58 | #endif /* PERF_SRCLINE_H */ |
59 | |