s/struct _serial_t/struct serial/
[deliverable/binutils-gdb.git] / gdb / tracepoint.c
index 8c229d4da43064fe8a41c3637a6a854ea8d3b331..fbe377e02a1f3adbcca1b30f6583f55a26b47e0f 100644 (file)
@@ -1,5 +1,5 @@
 /* Tracing functionality for remote targets in custom GDB protocol
-   Copyright 1997, 1998 Free Software Foundation, Inc.
+   Copyright 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "inferior.h"
 #include "tracepoint.h"
 #include "remote.h"
+#include "linespec.h"
+#include "regcache.h"
+#include "completer.h"
+#include "gdb-events.h"
 
 #include "ax.h"
 #include "ax-gdb.h"
@@ -340,7 +344,7 @@ set_raw_tracepoint (struct symtab_and_line sal)
   struct cleanup *old_chain;
 
   t = (struct tracepoint *) xmalloc (sizeof (struct tracepoint));
-  old_chain = make_cleanup (free, t);
+  old_chain = make_cleanup (xfree, t);
   memset (t, 0, sizeof (*t));
   t->address = sal.pc;
   if (sal.symtab == NULL)
@@ -420,10 +424,6 @@ trace_command (char *arg, int from_tty)
        t->addr_string = savestring (addr_start, addr_end - addr_start);
 
       trace_mention (t);
-
-      /* Let the UI know of any additions */
-      if (create_tracepoint_hook)
-       create_tracepoint_hook (t);
     }
 
   if (sals.nelts > 1)
@@ -476,19 +476,38 @@ tracepoints_info (char *tpnum_exp, int from_tty)
        {
          printf_filtered ("Num Enb ");
          if (addressprint)
-           printf_filtered ("Address    ");
+           {
+             if (TARGET_ADDR_BIT <= 32)
+               printf_filtered ("Address    ");
+             else
+               printf_filtered ("Address            ");
+           }
          printf_filtered ("PassC StepC What\n");
        }
       strcpy (wrap_indent, "                           ");
       if (addressprint)
-       strcat (wrap_indent, "           ");
+       {
+         if (TARGET_ADDR_BIT <= 32)
+           strcat (wrap_indent, "           ");
+         else
+           strcat (wrap_indent, "                   ");
+       }
 
       printf_filtered ("%-3d %-3s ", t->number,
                       t->enabled == enabled ? "y" : "n");
       if (addressprint)
-       printf_filtered ("%s ",
-                        local_hex_string_custom ((unsigned long) t->address,
-                                                 "08l"));
+       {
+         char *tmp;
+
+         if (TARGET_ADDR_BIT <= 32)
+           tmp = longest_local_hex_string_custom (t->address
+                                                  & (CORE_ADDR) 0xffffffff, 
+                                                  "08l");
+         else
+           tmp = longest_local_hex_string_custom (t->address, "016l");
+
+         printf_filtered ("%s ", tmp);
+       }
       printf_filtered ("%-5d %-5ld ", t->pass_count, t->step_count);
 
       if (t->source_file)
@@ -551,13 +570,11 @@ tracepoint_operation (struct tracepoint *t, int from_tty,
     {
     case enable_op:
       t->enabled = enabled;
-      if (modify_tracepoint_hook)
-       modify_tracepoint_hook (t);
+      tracepoint_modify_event (t->number);
       break;
     case disable_op:
       t->enabled = disabled;
-      if (modify_tracepoint_hook)
-       modify_tracepoint_hook (t);
+      tracepoint_modify_event (t->number);
       break;
     case delete_op:
       if (tracepoint_chain == t)
@@ -566,22 +583,19 @@ tracepoint_operation (struct tracepoint *t, int from_tty,
       ALL_TRACEPOINTS (t2)
        if (t2->next == t)
        {
+         tracepoint_delete_event (t2->number);
          t2->next = t->next;
          break;
        }
 
-      /* Let the UI know of any deletions */
-      if (delete_tracepoint_hook)
-       delete_tracepoint_hook (t);
-
       if (t->addr_string)
-       free (t->addr_string);
+       xfree (t->addr_string);
       if (t->source_file)
-       free (t->source_file);
+       xfree (t->source_file);
       if (t->actions)
        free_actions (t);
 
-      free (t);
+      xfree (t);
       break;
     }
 }
@@ -719,8 +733,7 @@ trace_pass_command (char *args, int from_tty)
            if (t1 == (struct tracepoint *) -1 || t1 == t2)
              {
                t2->pass_count = count;
-               if (modify_tracepoint_hook)
-                 modify_tracepoint_hook (t2);
+               tracepoint_modify_event (t2->number);
                if (from_tty)
                  printf_filtered ("Setting tracepoint %d's passcount to %d\n",
                                   t2->number, count);
@@ -970,7 +983,7 @@ validate_actionline (char **line, struct tracepoint *t)
            error ("expression too complicated, try simplifying");
 
          ax_reqs (aexpr, &areqs);
-         (void) make_cleanup (free, areqs.reg_mask);
+         (void) make_cleanup (xfree, areqs.reg_mask);
 
          if (areqs.flaw != agent_flaw_none)
            error ("malformed expression");
@@ -1021,8 +1034,8 @@ free_actions (struct tracepoint *t)
     {
       next = line->next;
       if (line->action)
-       free (line->action);
-      free (line);
+       xfree (line->action);
+      xfree (line);
     }
   t->actions = NULL;
 }
@@ -1456,9 +1469,9 @@ free_actions_list (char **actions_list)
     return;
 
   for (ndx = 0; actions_list[ndx]; ndx++)
-    free (actions_list[ndx]);
+    xfree (actions_list[ndx]);
 
-  free (actions_list);
+  xfree (actions_list);
 }
 
 /* render all actions into gdb protocol */
@@ -1540,7 +1553,8 @@ encode_actions (struct tracepoint *t, char ***tdp_actions,
                  struct cleanup *old_chain1 = NULL;
                  struct agent_reqs areqs;
 
-                 exp = parse_exp_1 (&action_exp, block_for_pc (t->address), 1);
+                 exp = parse_exp_1 (&action_exp, 
+                                    block_for_pc (t->address), 1);
                  old_chain = make_cleanup (free_current_contents, &exp);
 
                  switch (exp->elts[0].opcode)
@@ -2055,7 +2069,7 @@ trace_find_tracepoint_command (char *args, int from_tty)
        else
          tdp = tracepoint_number;      /* default is current TDP */
       else
-       tdp = parse_and_eval_address (args);
+       tdp = parse_and_eval_long (args);
 
       sprintf (target_buf, "QTFrame:tdp:%x", tdp);
       finish_tfind_command (target_buf, sizeof (target_buf), from_tty);
@@ -2097,7 +2111,7 @@ trace_find_line_command (char *args, int from_tty)
          sal = sals.sals[0];
        }
 
-      old_chain = make_cleanup (free, sals.sals);
+      old_chain = make_cleanup (xfree, sals.sals);
       if (sal.symtab == 0)
        {
          printf_filtered ("TFIND: No line number information available");
@@ -2599,6 +2613,8 @@ get_traceframe_number (void)
 void
 _initialize_tracepoint (void)
 {
+  struct cmd_list_element *c;
+
   tracepoint_chain = 0;
   tracepoint_count = 0;
   traceframe_number = -1;
@@ -2650,9 +2666,10 @@ last tracepoint set.");
 
   add_info_alias ("tp", "tracepoints", 1);
 
-  add_com ("save-tracepoints", class_trace, tracepoint_save_command,
-          "Save current tracepoint definitions as a script.\n\
+  c = add_com ("save-tracepoints", class_trace, tracepoint_save_command,
+              "Save current tracepoint definitions as a script.\n\
 Use the 'source' command in another debug session to restore them.");
+  c->completer = filename_completer;
 
   add_com ("tdump", class_trace, trace_dump_command,
           "Print everything collected at the current tracepoint.");
@@ -2769,12 +2786,13 @@ Arguments are tracepoint numbers, separated by spaces.\n\
 No argument means enable all tracepoints.",
           &enablelist);
 
-  add_com ("trace", class_trace, trace_command,
-          "Set a tracepoint at a specified line or function or address.\n\
+  c = add_com ("trace", class_trace, trace_command,
+              "Set a tracepoint at a specified line or function or address.\n\
 Argument may be a line number, function name, or '*' plus an address.\n\
 For a line number or function, trace at the start of its code.\n\
 If an address is specified, trace at that exact address.\n\n\
 Do \"help tracepoints\" for info on other tracepoint commands.");
+  c->completer = location_completer;
 
   add_com_alias ("tp", "trace", class_alias, 0);
   add_com_alias ("tr", "trace", class_alias, 1);
This page took 0.026038 seconds and 4 git commands to generate.