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