1 /* Data structures associated with tracepoints in GDB. 2 Copyright (C) 1997-2000, 2007-2012 Free Software Foundation, Inc. 3 4 This file is part of GDB. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 19 #if !defined (TRACEPOINT_H) 20 #define TRACEPOINT_H 1 21 22 #include "breakpoint.h" 23 #include "target.h" 24 #include "memrange.h" 25 26 /* A trace state variable is a value managed by a target being 27 traced. A trace state variable (or tsv for short) can be accessed 28 and assigned to by tracepoint actions and conditionals, but is not 29 part of the program being traced, and it doesn't have to be 30 collected. Effectively the variables are scratch space for 31 tracepoints. */ 32 33 struct trace_state_variable 34 { 35 /* The variable's name. The user has to prefix with a dollar sign, 36 but we don't store that internally. */ 37 const char *name; 38 39 /* An id number assigned by GDB, and transmitted to targets. */ 40 int number; 41 42 /* The initial value of a variable is a 64-bit signed integer. */ 43 LONGEST initial_value; 44 45 /* 1 if the value is known, else 0. The value is known during a 46 trace run, or in tfind mode if the variable was collected into 47 the current trace frame. */ 48 int value_known; 49 50 /* The value of a variable is a 64-bit signed integer. */ 51 LONGEST value; 52 53 /* This is true for variables that are predefined and built into 54 the target. */ 55 int builtin; 56 }; 57 58 /* The trace status encompasses various info about the general state 59 of the tracing run. */ 60 61 enum trace_stop_reason 62 { 63 trace_stop_reason_unknown, 64 trace_never_run, 65 tstop_command, 66 trace_buffer_full, 67 trace_disconnected, 68 tracepoint_passcount, 69 tracepoint_error 70 }; 71 72 struct trace_status 73 { 74 /* This is true if the status is coming from a file rather 75 than a live target. */ 76 int from_file; 77 78 /* This is true if the value of the running field is known. */ 79 int running_known; 80 81 /* This is true when the trace experiment is actually running. */ 82 int running; 83 84 enum trace_stop_reason stop_reason; 85 86 /* If stop_reason is tracepoint_passcount or tracepoint_error, this 87 is the (on-target) number of the tracepoint which caused the 88 stop. */ 89 int stopping_tracepoint; 90 91 /* If stop_reason is tstop_command or tracepoint_error, this is an 92 arbitrary string that may describe the reason for the stop in 93 more detail. */ 94 95 char *stop_desc; 96 97 /* Number of traceframes currently in the buffer. */ 98 99 int traceframe_count; 100 101 /* Number of traceframes created since start of run. */ 102 103 int traceframes_created; 104 105 /* Total size of the target's trace buffer. */ 106 107 int buffer_size; 108 109 /* Unused bytes left in the target's trace buffer. */ 110 111 int buffer_free; 112 113 /* 1 if the target will continue tracing after disconnection, else 114 0. If the target does not report a value, assume 0. */ 115 116 int disconnected_tracing; 117 118 /* 1 if the target is using a circular trace buffer, else 0. If the 119 target does not report a value, assume 0. */ 120 121 int circular_buffer; 122 123 /* The "name" of the person running the trace. This is an 124 arbitrary string. */ 125 126 char *user_name; 127 128 /* "Notes" about the trace. This is an arbitrary string not 129 interpreted by GDBserver in any special way. */ 130 131 char *notes; 132 133 /* The calendar times at which the trace run started and stopped, 134 both expressed in microseconds of Unix time. */ 135 136 LONGEST start_time; 137 LONGEST stop_time; 138 }; 139 140 struct trace_status *current_trace_status (void); 141 142 extern char *default_collect; 143 144 /* Struct to collect random info about tracepoints on the target. */ 145 146 DEF_VEC_P (char_ptr); 147 148 struct uploaded_tp 149 { 150 int number; 151 enum bptype type; 152 ULONGEST addr; 153 int enabled; 154 int step; 155 int pass; 156 int orig_size; 157 158 /* String that is the encoded form of the tracepoint's condition. */ 159 char *cond; 160 161 /* Vectors of strings that are the encoded forms of a tracepoint's 162 actions. */ 163 VEC(char_ptr) *actions; 164 VEC(char_ptr) *step_actions; 165 166 /* The original string defining the location of the tracepoint. */ 167 char *at_string; 168 169 /* The original string defining the tracepoint's condition. */ 170 char *cond_string; 171 172 /* List of original strings defining the tracepoint's actions. */ 173 VEC(char_ptr) *cmd_strings; 174 175 /* The tracepoint's current hit count. */ 176 int hit_count; 177 178 /* The tracepoint's current traceframe usage. */ 179 ULONGEST traceframe_usage; 180 181 struct uploaded_tp *next; 182 }; 183 184 /* Struct recording info about trace state variables on the target. */ 185 186 struct uploaded_tsv 187 { 188 const char *name; 189 int number; 190 LONGEST initial_value; 191 int builtin; 192 struct uploaded_tsv *next; 193 }; 194 195 /* Struct recording info about a target static tracepoint marker. */ 196 197 struct static_tracepoint_marker 198 { 199 struct gdbarch *gdbarch; 200 CORE_ADDR address; 201 202 /* The string ID of the marker. */ 203 char *str_id; 204 205 /* Extra target reported info associated with the marker. */ 206 char *extra; 207 }; 208 209 extern void parse_static_tracepoint_marker_definition 210 (char *line, char **pp, 211 struct static_tracepoint_marker *marker); 212 extern void release_static_tracepoint_marker (struct static_tracepoint_marker *); 213 214 /* A hook used to notify the UI of tracepoint operations. */ 215 216 extern void (*deprecated_trace_find_hook) (char *arg, int from_tty); 217 extern void (*deprecated_trace_start_stop_hook) (int start, int from_tty); 218 219 /* Returns the current traceframe number. */ 220 extern int get_traceframe_number (void); 221 222 /* Make the traceframe NUM be the current GDB trace frame number, and 223 do nothing more. In particular, this does not flush the 224 register/frame caches or notify the target about the trace frame 225 change, so that is can be used when we need to momentarily access 226 live memory. Targets lazily switch their current traceframe to 227 match GDB's traceframe number, at the appropriate times. */ 228 extern void set_traceframe_number (int); 229 230 /* Make the traceframe NUM be the current trace frame, all the way to 231 the target, and flushes all global state (register/frame caches, 232 etc.). */ 233 extern void set_current_traceframe (int num); 234 235 struct cleanup *make_cleanup_restore_current_traceframe (void); 236 struct cleanup *make_cleanup_restore_traceframe_number (void); 237 238 void free_actions (struct breakpoint *); 239 240 extern char *decode_agent_options (char *exp); 241 242 extern void validate_actionline (char **, struct breakpoint *); 243 244 extern void end_actions_pseudocommand (char *args, int from_tty); 245 extern void while_stepping_pseudocommand (char *args, int from_tty); 246 247 extern struct trace_state_variable *find_trace_state_variable (const char *name); 248 extern struct trace_state_variable *create_trace_state_variable (const char *name); 249 250 extern int encode_source_string (int num, ULONGEST addr, 251 char *srctype, char *src, 252 char *buf, int buf_size); 253 254 extern void parse_trace_status (char *line, struct trace_status *ts); 255 256 extern void parse_tracepoint_status (char *p, struct breakpoint *tp, 257 struct uploaded_tp *utp); 258 259 extern void parse_tracepoint_definition (char *line, 260 struct uploaded_tp **utpp); 261 extern void parse_tsv_definition (char *line, struct uploaded_tsv **utsvp); 262 263 extern struct uploaded_tp *get_uploaded_tp (int num, ULONGEST addr, 264 struct uploaded_tp **utpp); 265 extern struct tracepoint *create_tracepoint_from_upload (struct uploaded_tp *utp); 266 extern void merge_uploaded_tracepoints (struct uploaded_tp **utpp); 267 extern void merge_uploaded_trace_state_variables (struct uploaded_tsv **utsvp); 268 269 extern void disconnect_tracing (int from_tty); 270 271 extern void start_tracing (char *notes); 272 extern void stop_tracing (char *notes); 273 274 extern void trace_status_mi (int on_stop); 275 276 extern void tvariables_info_1 (void); 277 extern void save_trace_state_variables (struct ui_file *fp); 278 279 extern void tfind_1 (enum trace_find_type type, int num, 280 ULONGEST addr1, ULONGEST addr2, 281 int from_tty); 282 283 extern void trace_save (const char *filename, int target_does_save); 284 285 extern struct traceframe_info *parse_traceframe_info (const char *tframe_info); 286 287 extern int traceframe_available_memory (VEC(mem_range_s) **result, 288 CORE_ADDR memaddr, ULONGEST len); 289 290 #endif /* TRACEPOINT_H */ 291