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: */ 25struct action_line 26 { 27 struct action_line *next; 28 char *action; 29 }; 30 31/* The data structure for a tracepoint: */ 32 33struct 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 95enum 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 106extern struct tracepoint *tracepoint_chain; 107 108extern unsigned long trace_running_p; 109 110/* A hook used to notify the UI of tracepoint operations */ 111 112void (*create_tracepoint_hook) (struct tracepoint *); 113void (*delete_tracepoint_hook) (struct tracepoint *); 114void (*modify_tracepoint_hook) (struct tracepoint *); 115void (*trace_find_hook) (char *arg, int from_tty); 116void (*trace_start_stop_hook) (int start, int from_tty); 117 118struct tracepoint *get_tracepoint_by_number (char **, int, int); 119int get_traceframe_number (void); 120void free_actions (struct tracepoint *); 121enum 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