2010-01-21 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
[deliverable/binutils-gdb.git] / gdb / tracepoint.h
index 6f50f19ffbf7db261304c38c7075d507ae88e5d3..d26c9505089616c55f14eddc7d1321a1701a0dc1 100644 (file)
@@ -1,11 +1,12 @@
 /* Data structures associated with tracepoints in GDB.
-   Copyright (C) 1997, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2000, 2007, 2008, 2009, 2010
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #if !defined (TRACEPOINT_H)
 #define TRACEPOINT_H 1
 
-#if !defined (BREAKPOINT_H)
-enum enable
-  {
-    disabled, enabled
-  };
-#endif
 /* The data structure for an action: */
 struct action_line
   {
@@ -34,107 +27,136 @@ struct action_line
     char *action;
   };
 
-/* The data structure for a tracepoint: */
-
-struct tracepoint
+enum actionline_type
   {
-    struct tracepoint *next;
+    BADLINE = -1,
+    GENERIC = 0,
+    END = 1,
+    STEPPING = 2
+  };
 
-    enum enable enabled;
+/* A trace state variable is a value managed by a target being
+   traced. A trace state variable (or tsv for short) can be accessed
+   and assigned to by tracepoint actions and conditionals, but is not
+   part of the program being traced, and it doesn't have to be
+   collected. Effectively the variables are scratch space for
+   tracepoints.  */
 
-#if 0
-    /* Type of tracepoint (MVS FIXME: needed?). */
-    enum tptype type;
+struct trace_state_variable
+  {
+    /* The variable's name.  The user has to prefix with a dollar sign,
+       but we don't store that internally.  */
+    const char *name;
 
-    /* What to do with this tracepoint after we hit it MVS FIXME: needed?). */
-    enum tpdisp disposition;
-#endif
-    /* Number assigned to distinguish tracepoints.  */
+    /* An id number assigned by GDB, and transmitted to targets.  */
     int number;
 
-    /* Address to trace at, or NULL if not an instruction tracepoint (MVS ?). */
-    CORE_ADDR address;
+    /* The initial value of a variable is a 64-bit signed integer.  */
+    LONGEST initial_value;
+
+    /* 1 if the value is known, else 0.  The value is known during a
+       trace run, or in tfind mode if the variable was collected into
+       the current trace frame.  */
+    int value_known;
+
+    /* The value of a variable is a 64-bit signed integer.  */
+    LONGEST value;
 
-    /* Line number of this address.  Only matters if address is non-NULL.  */
-    int line_number;
+    /* This is true for variables that are predefined and built into
+       the target.  */
+    int builtin;
+   };
 
-    /* Source file name of this address.  Only matters if address is non-NULL. */
-    char *source_file;
+/* The trace status encompasses various info about the general state
+   of the tracing run.  */
 
-    /* Number of times this tracepoint should single-step 
-       and collect additional data */
-    long step_count;
+enum trace_stop_reason
+  {
+    trace_stop_reason_unknown,
+    trace_never_run,
+    tstop_command,
+    trace_buffer_full,
+    trace_disconnected,
+    tracepoint_passcount
+  };
 
-    /* Number of times this tracepoint should be hit before disabling/ending. */
-    int pass_count;
+struct trace_status
+{
+  /* This is true if the status is coming from a file rather
+     than a live target.  */
+  int from_file;
 
-    /* Chain of action lines to execute when this tracepoint is hit. */
-    struct action_line *actions;
+  /* This is true if the value of the running field is known.  */
+  int running_known;
 
-    /* Conditional (MVS ?).  */
-    struct expression *cond;
+  int running;
 
-    /* String we used to set the tracepoint (malloc'd).  Only matters if
-       address is non-NULL.  */
-    char *addr_string;
+  enum trace_stop_reason stop_reason;
 
-    /* Language we used to set the tracepoint.  */
-    enum language language;
+  int stopping_tracepoint;
 
-    /* Input radix we used to set the tracepoint.  */
-    int input_radix;
+  int traceframe_count;
 
-    /* Count of the number of times this tracepoint was taken, dumped
-       with the info, but not used for anything else.  Useful for
-       seeing how many times you hit a tracepoint prior to the program
-       aborting, so you can back up to just before the abort.  */
-    int hit_count;
+  unsigned long long buffer_size;
 
-    /* Thread number for thread-specific tracepoint, or -1 if don't care */
-    int thread;
+  unsigned long long buffer_free;
+};
 
-    /* BFD section, in case of overlays: 
-       no, I don't know if tracepoints are really gonna work with overlays.  */
-    asection *section;
-  };
+struct trace_status *current_trace_status (void);
 
-enum actionline_type
-  {
-    BADLINE = -1,
-    GENERIC = 0,
-    END = 1,
-    STEPPING = 2
-  };
+extern char *default_collect;
 
+/* Struct to collect random info about tracepoints on the target.  */
 
-/* The tracepont chain of all tracepoints */
+struct uploaded_tp {
+  int number;
+  enum bptype type;
+  ULONGEST addr;
+  int enabled;
+  int step;
+  int pass;
+  int orig_size;
+  char *cond;
+  int numactions;
+  char *actions[100];
+  int num_step_actions;
+  char *step_actions[100];
+  struct uploaded_tp *next;
+};
 
-extern struct tracepoint *tracepoint_chain;
+/* Struct recording info about trace state variables on the target.  */
 
-extern unsigned long trace_running_p;
+struct uploaded_tsv {
+  const char *name;
+  int number;
+  LONGEST initial_value;
+  int builtin;
+  struct uploaded_tsv *next;
+};
 
-/* A hook used to notify the UI of tracepoint operations */
+/* A hook used to notify the UI of tracepoint operations */
 
-void (*create_tracepoint_hook) (struct tracepoint *);
-void (*delete_tracepoint_hook) (struct tracepoint *);
-void (*modify_tracepoint_hook) (struct tracepoint *);
-void (*trace_find_hook) (char *arg, int from_tty);
-void (*trace_start_stop_hook) (int start, int from_tty);
+extern void (*deprecated_trace_find_hook) (char *arg, int from_tty);
+extern void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
 
-struct tracepoint *get_tracepoint_by_number (char **, int, int);
 int get_traceframe_number (void);
-void free_actions (struct tracepoint *);
-enum actionline_type validate_actionline (char **, struct tracepoint *);
+void free_actions (struct breakpoint *);
+enum actionline_type validate_actionline (char **, struct breakpoint *);
+
+extern void end_actions_pseudocommand (char *args, int from_tty);
+extern void while_stepping_pseudocommand (char *args, int from_tty);
+
+extern struct trace_state_variable *find_trace_state_variable (const char *name);
 
+extern void parse_trace_status (char *line, struct trace_status *ts);
 
-/* Walk the following statement or block through all tracepoints.
-   ALL_TRACEPOINTS_SAFE does so even if the statment deletes the current
-   breakpoint.  */
+extern void parse_tracepoint_definition (char *line, struct uploaded_tp **utpp);
+extern void parse_tsv_definition (char *line, struct uploaded_tsv **utsvp);
 
-#define ALL_TRACEPOINTS(t)  for (t = tracepoint_chain; t; t = t->next)
+extern struct uploaded_tp *get_uploaded_tp (int num, ULONGEST addr,
+                                           struct uploaded_tp **utpp);
+extern struct breakpoint *create_tracepoint_from_upload (struct uploaded_tp *utp);
+extern void merge_uploaded_tracepoints (struct uploaded_tp **utpp);
+extern void merge_uploaded_trace_state_variables (struct uploaded_tsv **utsvp);
 
-#define ALL_TRACEPOINTS_SAFE(t,tmp)    \
-       for (t = tracepoint_chain;      \
-            t ? (tmp = t->next, 1) : 0;\
-            t = tmp)
-#endif /* TRACEPOINT_H */
+#endif /* TRACEPOINT_H */
This page took 0.027133 seconds and 4 git commands to generate.