GDB (xrefs)
btrace-common.h
Go to the documentation of this file.
1 /* Branch trace support for GDB, the GNU debugger.
2 
3  Copyright (C) 2013-2018 Free Software Foundation, Inc.
4 
5  Contributed by Intel Corp. <markus.t.metzger@intel.com>.
6 
7  This file is part of GDB.
8 
9  This program is free software; you can redistribute it and/or modify
10  it under the terms of the GNU General Public License as published by
11  the Free Software Foundation; either version 3 of the License, or
12  (at your option) any later version.
13 
14  This program is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU General Public License for more details.
18 
19  You should have received a copy of the GNU General Public License
20  along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 
22 #ifndef BTRACE_COMMON_H
23 #define BTRACE_COMMON_H
24 
25 /* Branch tracing (btrace) is a per-thread control-flow execution trace of the
26  inferior. For presentation purposes, the branch trace is represented as a
27  list of sequential control-flow blocks, one such list per thread. */
28 
29 #include "vec.h"
30 
31 /* A branch trace block.
32 
33  This represents a block of sequential control-flow. Adjacent blocks will be
34  connected via calls, returns, or jumps. The latter can be direct or
35  indirect, conditional or unconditional. Branches can further be
36  asynchronous, e.g. interrupts. */
38 {
39  /* The address of the first byte of the first instruction in the block.
40  The address may be zero if we do not know the beginning of this block,
41  such as for the first block in a delta trace. */
43 
44  /* The address of the first byte of the last instruction in the block. */
46 };
47 
48 /* Define functions operating on a vector of branch trace blocks. */
51 
52 /* Enumeration of btrace formats. */
53 
55 {
56  /* No branch trace format. */
58 
59  /* Branch trace is in Branch Trace Store (BTS) format.
60  Actually, the format is a sequence of blocks derived from BTS. */
62 
63  /* Branch trace is in Intel Processor Trace format. */
65 };
66 
67 /* An enumeration of cpu vendors. */
68 
70 {
71  /* We do not know this vendor. */
73 
74  /* Intel. */
76 };
77 
78 /* A cpu identifier. */
79 
80 struct btrace_cpu
81 {
82  /* The processor vendor. */
84 
85  /* The cpu family. */
86  unsigned short family;
87 
88  /* The cpu model. */
89  unsigned char model;
90 
91  /* The cpu stepping. */
92  unsigned char stepping;
93 };
94 
95 /* A BTS configuration. */
96 
98 {
99  /* The size of the branch trace buffer in bytes.
100 
101  This is unsigned int and not size_t since it is registered as
102  control variable for "set record btrace bts buffer-size". */
103  unsigned int size;
104 };
105 
106 /* An Intel Processor Trace configuration. */
107 
109 {
110  /* The size of the branch trace buffer in bytes.
111 
112  This is unsigned int and not size_t since it is registered as
113  control variable for "set record btrace pt buffer-size". */
114  unsigned int size;
115 };
116 
117 /* A branch tracing configuration.
118 
119  This describes the requested configuration as well as the actually
120  obtained configuration.
121  We describe the configuration for all different formats so we can
122  easily switch between formats. */
123 
125 {
126  /* The branch tracing format. */
128 
129  /* The BTS format configuration. */
131 
132  /* The Intel Processor Trace format configuration. */
134 };
135 
136 /* Branch trace in BTS format. */
138 {
139  /* Branch trace is represented as a vector of branch trace blocks starting
140  with the most recent block. */
141  VEC (btrace_block_s) *blocks;
142 };
143 
144 /* Configuration information to go with the trace data. */
146 {
147  /* The processor on which the trace has been collected. */
148  struct btrace_cpu cpu;
149 };
150 
151 /* Branch trace in Intel Processor Trace format. */
153 {
154  /* Some configuration information to go with the data. */
156 
157  /* The trace data. */
159 
160  /* The size of DATA in bytes. */
161  size_t size;
162 };
163 
164 /* The branch trace data. */
166 {
168 
169  union
170  {
171  /* Format == BTRACE_FORMAT_BTS. */
173 
174  /* Format == BTRACE_FORMAT_PT. */
176  } variant;
177 };
178 
179 /* Target specific branch trace information. */
180 struct btrace_target_info;
181 
182 /* Enumeration of btrace read types. */
183 
185 {
186  /* Send all available trace. */
188 
189  /* Send all available trace, if it changed. */
191 
192  /* Send the trace since the last request. This will fail if the trace
193  buffer overflowed. */
195 };
196 
197 /* Enumeration of btrace errors. */
198 
200 {
201  /* No error. Everything is OK. */
203 
204  /* An unknown error. */
206 
207  /* Branch tracing is not supported on this system. */
209 
210  /* The branch trace buffer overflowed; no delta read possible. */
212 };
213 
214 /* Return a string representation of FORMAT. */
215 extern const char *btrace_format_string (enum btrace_format format);
216 
217 /* Return an abbreviation string representation of FORMAT. */
218 extern const char *btrace_format_short_string (enum btrace_format format);
219 
220 /* Initialize DATA. */
221 extern void btrace_data_init (struct btrace_data *data);
222 
223 /* Cleanup DATA. */
224 extern void btrace_data_fini (struct btrace_data *data);
225 
226 /* Clear DATA. */
227 extern void btrace_data_clear (struct btrace_data *data);
228 
229 /* Return non-zero if DATA is empty; zero otherwise. */
230 extern int btrace_data_empty (struct btrace_data *data);
231 
232 /* Append the branch trace data from SRC to the end of DST.
233  Both SRC and DST must use the same format.
234  Returns zero on success; a negative number otherwise. */
235 extern int btrace_data_append (struct btrace_data *dst,
236  const struct btrace_data *src);
237 
238 #endif /* BTRACE_COMMON_H */
void btrace_data_clear(struct btrace_data *data)
union btrace_data::@24 variant
struct btrace_config_bts bts
struct btrace_cpu cpu
unsigned short family
Definition: btrace-common.h:86
bfd_vma CORE_ADDR
Definition: common-types.h:41
CORE_ADDR begin
Definition: btrace-common.h:42
void btrace_data_fini(struct btrace_data *data)
Definition: btrace-common.c:75
VEC(btrace_block_s) *blocks
DEF_VEC_O(btrace_block_s)
unsigned int size
const char * btrace_format_short_string(enum btrace_format format)
Definition: btrace-common.c:47
struct btrace_data_bts bts
CORE_ADDR end
Definition: btrace-common.h:45
btrace_format
Definition: btrace-common.h:54
enum btrace_cpu_vendor vendor
Definition: btrace-common.h:83
enum btrace_format format
int btrace_data_empty(struct btrace_data *data)
Definition: btrace-common.c:98
btrace_read_type
unsigned char model
Definition: btrace-common.h:89
struct btrace_data_pt pt
btrace_error
const char * btrace_format_string(enum btrace_format format)
Definition: btrace-common.c:27
struct btrace_config_pt pt
bfd_byte gdb_byte
Definition: common-types.h:38
unsigned int size
btrace_cpu_vendor
Definition: btrace-common.h:69
struct btrace_data_pt_config config
int btrace_data_append(struct btrace_data *dst, const struct btrace_data *src)
gdb_byte * data
void btrace_data_init(struct btrace_data *data)
Definition: btrace-common.c:67
unsigned char stepping
Definition: btrace-common.h:92
enum btrace_format format