1 /* Data structures associated with tracepoints in GDB. 2 Copyright 1997, 1998, 1999, 2000 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 2 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, write to the Free Software 18 Foundation, Inc., 59 Temple Place - Suite 330, 19 Boston, MA 02111-1307, USA. */ 20 21 #if !defined (TRACEPOINT_H) 22 #define TRACEPOINT_H 1 23 24 /* The data structure for an action: */ 25 struct action_line 26 { 27 struct action_line *next; 28 char *action; 29 }; 30 31 /* The data structure for a tracepoint: */ 32 33 struct tracepoint 34 { 35 struct tracepoint *next; 36 37 int enabled_p; 38 39 #if 0 40 /* Type of tracepoint (MVS FIXME: needed?). */ 41 enum tptype type; 42 43 /* What to do with this tracepoint after we hit it MVS FIXME: needed?). */ 44 enum tpdisp disposition; 45 #endif 46 /* Number assigned to distinguish tracepoints. */ 47 int number; 48 49 /* Address to trace at, or NULL if not an instruction tracepoint (MVS ?). */ 50 CORE_ADDR address; 51 52 /* Line number of this address. Only matters if address is non-NULL. */ 53 int line_number; 54 55 /* Source file name of this address. Only matters if address is non-NULL. */ 56 char *source_file; 57 58 /* Number of times this tracepoint should single-step 59 and collect additional data */ 60 long step_count; 61 62 /* Number of times this tracepoint should be hit before disabling/ending. */ 63 int pass_count; 64 65 /* Chain of action lines to execute when this tracepoint is hit. */ 66 struct action_line *actions; 67 68 /* Conditional (MVS ?). */ 69 struct expression *cond; 70 71 /* String we used to set the tracepoint (malloc'd). Only matters if 72 address is non-NULL. */ 73 char *addr_string; 74 75 /* Language we used to set the tracepoint. */ 76 enum language language; 77 78 /* Input radix we used to set the tracepoint. */ 79 int input_radix; 80 81 /* Count of the number of times this tracepoint was taken, dumped 82 with the info, but not used for anything else. Useful for 83 seeing how many times you hit a tracepoint prior to the program 84 aborting, so you can back up to just before the abort. */ 85 int hit_count; 86 87 /* Thread number for thread-specific tracepoint, or -1 if don't care */ 88 int thread; 89 90 /* BFD section, in case of overlays: 91 no, I don't know if tracepoints are really gonna work with overlays. */ 92 asection *section; 93 }; 94 95 enum actionline_type 96 { 97 BADLINE = -1, 98 GENERIC = 0, 99 END = 1, 100 STEPPING = 2 101 }; 102 103 104 /* The tracepoint chain of all tracepoints */ 105 106 extern struct tracepoint *tracepoint_chain; 107 108 extern unsigned long trace_running_p; 109 110 /* A hook used to notify the UI of tracepoint operations */ 111 112 void (*deprecated_create_tracepoint_hook) (struct tracepoint *); 113 void (*deprecated_delete_tracepoint_hook) (struct tracepoint *); 114 void (*deprecated_modify_tracepoint_hook) (struct tracepoint *); 115 void (*deprecated_trace_find_hook) (char *arg, int from_tty); 116 void (*deprecated_trace_start_stop_hook) (int start, int from_tty); 117 118 struct tracepoint *get_tracepoint_by_number (char **, int, int); 119 int get_traceframe_number (void); 120 void free_actions (struct tracepoint *); 121 enum actionline_type validate_actionline (char **, struct tracepoint *); 122 123 124 /* Walk the following statement or block through all tracepoints. 125 ALL_TRACEPOINTS_SAFE does so even if the statment deletes the current 126 breakpoint. */ 127 128 #define ALL_TRACEPOINTS(t) for (t = tracepoint_chain; t; t = t->next) 129 130 #define ALL_TRACEPOINTS_SAFE(t,tmp) \ 131 for (t = tracepoint_chain; \ 132 t ? (tmp = t->next, 1) : 0;\ 133 t = tmp) 134 #endif /* TRACEPOINT_H */ 135