xref: /linux/tools/perf/util/srcline.h (revision cdd5b5a9761fd66d17586e4f4ba6588c70e640ea)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2632a5cabSArnaldo Carvalho de Melo #ifndef PERF_SRCLINE_H
3632a5cabSArnaldo Carvalho de Melo #define PERF_SRCLINE_H
4632a5cabSArnaldo Carvalho de Melo 
5632a5cabSArnaldo Carvalho de Melo #include <linux/list.h>
611ea2515SMilian Wolff #include <linux/rbtree.h>
7632a5cabSArnaldo Carvalho de Melo #include <linux/types.h>
8632a5cabSArnaldo Carvalho de Melo 
9632a5cabSArnaldo Carvalho de Melo struct dso;
10632a5cabSArnaldo Carvalho de Melo struct symbol;
11632a5cabSArnaldo Carvalho de Melo 
12*701677b9SIan Rogers extern int addr2line_timeout_ms;
13632a5cabSArnaldo Carvalho de Melo extern bool srcline_full_filename;
14632a5cabSArnaldo Carvalho de Melo char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
15935f5a9dSJin Yao 		  bool show_sym, bool show_addr, u64 ip);
16632a5cabSArnaldo Carvalho de Melo char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
17935f5a9dSJin Yao 		  bool show_sym, bool show_addr, bool unwind_inlines,
18935f5a9dSJin Yao 		  u64 ip);
19625db36eSIan Rogers void zfree_srcline(char **srcline);
20dd2e18e9SAndi Kleen char *get_srcline_split(struct dso *dso, u64 addr, unsigned *line);
21632a5cabSArnaldo Carvalho de Melo 
2221ac9d54SMilian Wolff /* insert the srcline into the DSO, which will take ownership */
2355ecd631SDavidlohr Bueso void srcline__tree_insert(struct rb_root_cached *tree, u64 addr, char *srcline);
2421ac9d54SMilian Wolff /* find previously inserted srcline */
2555ecd631SDavidlohr Bueso char *srcline__tree_find(struct rb_root_cached *tree, u64 addr);
2621ac9d54SMilian Wolff /* delete all srclines within the tree */
2755ecd631SDavidlohr Bueso void srcline__tree_delete(struct rb_root_cached *tree);
2821ac9d54SMilian Wolff 
29922db21dSArnaldo Carvalho de Melo extern char *srcline__unknown;
30922db21dSArnaldo Carvalho de Melo #define SRCLINE_UNKNOWN srcline__unknown
31632a5cabSArnaldo Carvalho de Melo 
32632a5cabSArnaldo Carvalho de Melo struct inline_list {
33fea0cf84SMilian Wolff 	struct symbol		*symbol;
342be8832fSMilian Wolff 	char			*srcline;
35632a5cabSArnaldo Carvalho de Melo 	struct list_head	list;
36632a5cabSArnaldo Carvalho de Melo };
37632a5cabSArnaldo Carvalho de Melo 
38632a5cabSArnaldo Carvalho de Melo struct inline_node {
39632a5cabSArnaldo Carvalho de Melo 	u64			addr;
40632a5cabSArnaldo Carvalho de Melo 	struct list_head	val;
4111ea2515SMilian Wolff 	struct rb_node		rb_node;
42632a5cabSArnaldo Carvalho de Melo };
43632a5cabSArnaldo Carvalho de Melo 
44fea0cf84SMilian Wolff /* parse inlined frames for the given address */
45fea0cf84SMilian Wolff struct inline_node *dso__parse_addr_inlines(struct dso *dso, u64 addr,
46fea0cf84SMilian Wolff 					    struct symbol *sym);
47fea0cf84SMilian Wolff /* free resources associated to the inline node list */
48632a5cabSArnaldo Carvalho de Melo void inline_node__delete(struct inline_node *node);
49632a5cabSArnaldo Carvalho de Melo 
5011ea2515SMilian Wolff /* insert the inline node list into the DSO, which will take ownership */
5155ecd631SDavidlohr Bueso void inlines__tree_insert(struct rb_root_cached *tree,
5255ecd631SDavidlohr Bueso 			  struct inline_node *inlines);
5311ea2515SMilian Wolff /* find previously inserted inline node list */
5455ecd631SDavidlohr Bueso struct inline_node *inlines__tree_find(struct rb_root_cached *tree, u64 addr);
5511ea2515SMilian Wolff /* delete all nodes within the tree of inline_node s */
5655ecd631SDavidlohr Bueso void inlines__tree_delete(struct rb_root_cached *tree);
5711ea2515SMilian Wolff 
58632a5cabSArnaldo Carvalho de Melo #endif /* PERF_SRCLINE_H */
59