]>
Commit | Line | Data |
---|---|---|
00447ccd AH |
1 | /* |
2 | * thread-stack.h: Synthesize a thread's stack using call / return events | |
3 | * Copyright (c) 2014, Intel Corporation. | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify it | |
6 | * under the terms and conditions of the GNU General Public License, | |
7 | * version 2, as published by the Free Software Foundation. | |
8 | * | |
9 | * This program is distributed in the hope it will be useful, but WITHOUT | |
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
12 | * more details. | |
13 | * | |
14 | */ | |
15 | ||
16 | #ifndef __PERF_THREAD_STACK_H | |
17 | #define __PERF_THREAD_STACK_H | |
18 | ||
19 | #include <sys/types.h> | |
20 | ||
21 | #include <linux/types.h> | |
92a9e4f7 | 22 | #include <linux/rbtree.h> |
00447ccd AH |
23 | |
24 | struct thread; | |
92a9e4f7 | 25 | struct comm; |
00447ccd | 26 | struct ip_callchain; |
92a9e4f7 AH |
27 | struct symbol; |
28 | struct dso; | |
29 | struct call_return_processor; | |
30 | struct comm; | |
31 | struct perf_sample; | |
32 | struct addr_location; | |
33 | ||
34 | /* | |
35 | * Call/Return flags. | |
36 | * | |
37 | * CALL_RETURN_NO_CALL: 'return' but no matching 'call' | |
38 | * CALL_RETURN_NO_RETURN: 'call' but no matching 'return' | |
39 | */ | |
40 | enum { | |
41 | CALL_RETURN_NO_CALL = 1 << 0, | |
42 | CALL_RETURN_NO_RETURN = 1 << 1, | |
43 | }; | |
44 | ||
45 | /** | |
46 | * struct call_return - paired call/return information. | |
47 | * @thread: thread in which call/return occurred | |
48 | * @comm: comm in which call/return occurred | |
49 | * @cp: call path | |
50 | * @call_time: timestamp of call (if known) | |
51 | * @return_time: timestamp of return (if known) | |
52 | * @branch_count: number of branches seen between call and return | |
53 | * @call_ref: external reference to 'call' sample (e.g. db_id) | |
54 | * @return_ref: external reference to 'return' sample (e.g. db_id) | |
55 | * @db_id: id used for db-export | |
56 | * @flags: Call/Return flags | |
57 | */ | |
58 | struct call_return { | |
59 | struct thread *thread; | |
60 | struct comm *comm; | |
61 | struct call_path *cp; | |
62 | u64 call_time; | |
63 | u64 return_time; | |
64 | u64 branch_count; | |
65 | u64 call_ref; | |
66 | u64 return_ref; | |
67 | u64 db_id; | |
68 | u32 flags; | |
69 | }; | |
70 | ||
71 | /** | |
72 | * struct call_path - node in list of calls leading to a function call. | |
73 | * @parent: call path to the parent function call | |
74 | * @sym: symbol of function called | |
75 | * @ip: only if sym is null, the ip of the function | |
76 | * @db_id: id used for db-export | |
77 | * @in_kernel: whether function is a in the kernel | |
78 | * @rb_node: node in parent's tree of called functions | |
79 | * @children: tree of call paths of functions called | |
80 | * | |
81 | * In combination with the call_return structure, the call_path structure | |
82 | * defines a context-sensitve call-graph. | |
83 | */ | |
84 | struct call_path { | |
85 | struct call_path *parent; | |
86 | struct symbol *sym; | |
87 | u64 ip; | |
88 | u64 db_id; | |
89 | bool in_kernel; | |
90 | struct rb_node rb_node; | |
91 | struct rb_root children; | |
92 | }; | |
00447ccd AH |
93 | |
94 | int thread_stack__event(struct thread *thread, u32 flags, u64 from_ip, | |
95 | u64 to_ip, u16 insn_len, u64 trace_nr); | |
92a9e4f7 | 96 | void thread_stack__set_trace_nr(struct thread *thread, u64 trace_nr); |
00447ccd AH |
97 | void thread_stack__sample(struct thread *thread, struct ip_callchain *chain, |
98 | size_t sz, u64 ip); | |
a5499b37 | 99 | int thread_stack__flush(struct thread *thread); |
00447ccd AH |
100 | void thread_stack__free(struct thread *thread); |
101 | ||
92a9e4f7 AH |
102 | struct call_return_processor * |
103 | call_return_processor__new(int (*process)(struct call_return *cr, void *data), | |
104 | void *data); | |
105 | void call_return_processor__free(struct call_return_processor *crp); | |
106 | int thread_stack__process(struct thread *thread, struct comm *comm, | |
107 | struct perf_sample *sample, | |
108 | struct addr_location *from_al, | |
109 | struct addr_location *to_al, u64 ref, | |
110 | struct call_return_processor *crp); | |
111 | ||
00447ccd | 112 | #endif |