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> | |
22 | ||
23 | struct thread; | |
92a9e4f7 | 24 | struct comm; |
00447ccd | 25 | struct ip_callchain; |
92a9e4f7 AH |
26 | struct symbol; |
27 | struct dso; | |
92a9e4f7 AH |
28 | struct comm; |
29 | struct perf_sample; | |
30 | struct addr_location; | |
451db126 | 31 | struct call_path; |
92a9e4f7 AH |
32 | |
33 | /* | |
34 | * Call/Return flags. | |
35 | * | |
36 | * CALL_RETURN_NO_CALL: 'return' but no matching 'call' | |
37 | * CALL_RETURN_NO_RETURN: 'call' but no matching 'return' | |
38 | */ | |
39 | enum { | |
40 | CALL_RETURN_NO_CALL = 1 << 0, | |
41 | CALL_RETURN_NO_RETURN = 1 << 1, | |
42 | }; | |
43 | ||
44 | /** | |
45 | * struct call_return - paired call/return information. | |
46 | * @thread: thread in which call/return occurred | |
47 | * @comm: comm in which call/return occurred | |
48 | * @cp: call path | |
49 | * @call_time: timestamp of call (if known) | |
50 | * @return_time: timestamp of return (if known) | |
51 | * @branch_count: number of branches seen between call and return | |
52 | * @call_ref: external reference to 'call' sample (e.g. db_id) | |
53 | * @return_ref: external reference to 'return' sample (e.g. db_id) | |
54 | * @db_id: id used for db-export | |
55 | * @flags: Call/Return flags | |
56 | */ | |
57 | struct call_return { | |
58 | struct thread *thread; | |
59 | struct comm *comm; | |
60 | struct call_path *cp; | |
61 | u64 call_time; | |
62 | u64 return_time; | |
63 | u64 branch_count; | |
64 | u64 call_ref; | |
65 | u64 return_ref; | |
66 | u64 db_id; | |
67 | u32 flags; | |
68 | }; | |
69 | ||
2c15f5eb CP |
70 | /** |
71 | * struct call_return_processor - provides a call-back to consume call-return | |
72 | * information. | |
73 | * @cpr: call path root | |
74 | * @process: call-back that accepts call/return information | |
75 | * @data: anonymous data for call-back | |
76 | */ | |
77 | struct call_return_processor { | |
78 | struct call_path_root *cpr; | |
79 | int (*process)(struct call_return *cr, void *data); | |
80 | void *data; | |
81 | }; | |
82 | ||
00447ccd AH |
83 | int thread_stack__event(struct thread *thread, u32 flags, u64 from_ip, |
84 | u64 to_ip, u16 insn_len, u64 trace_nr); | |
92a9e4f7 | 85 | void thread_stack__set_trace_nr(struct thread *thread, u64 trace_nr); |
00447ccd AH |
86 | void thread_stack__sample(struct thread *thread, struct ip_callchain *chain, |
87 | size_t sz, u64 ip); | |
a5499b37 | 88 | int thread_stack__flush(struct thread *thread); |
00447ccd | 89 | void thread_stack__free(struct thread *thread); |
e216708d | 90 | size_t thread_stack__depth(struct thread *thread); |
00447ccd | 91 | |
92a9e4f7 AH |
92 | struct call_return_processor * |
93 | call_return_processor__new(int (*process)(struct call_return *cr, void *data), | |
94 | void *data); | |
95 | void call_return_processor__free(struct call_return_processor *crp); | |
96 | int thread_stack__process(struct thread *thread, struct comm *comm, | |
97 | struct perf_sample *sample, | |
98 | struct addr_location *from_al, | |
99 | struct addr_location *to_al, u64 ref, | |
100 | struct call_return_processor *crp); | |
101 | ||
00447ccd | 102 | #endif |