Fri Jan 2 17:06:05 1998 Michael Snyder (msnyder@cleaver.cygnus.com)
authorMichael Snyder <msnyder@vmware.com>
Fri, 2 Jan 1998 17:09:12 +0000 (17:09 +0000)
committerMichael Snyder <msnyder@vmware.com>
Fri, 2 Jan 1998 17:09:12 +0000 (17:09 +0000)
        * tracepoint.c (finish_tfind_command): improved algorithm for
        deciding when we've "stepped" into a new stack frame.
        (map_args_over_tracepoints): loop over tracepoint list "safely",
        since list elements may be deleted during loop.
        (read_actions): add actions to history list.

gdb/ChangeLog
gdb/tracepoint.c

index face20512f4cf23a7b4b2c7e91081ae191d7c8be..f0d0be7ee41064aef0231489ce8cb29df14fe053 100644 (file)
@@ -1,3 +1,11 @@
+Fri Jan  2 17:06:05 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)
+
+        * tracepoint.c (finish_tfind_command): improved algorithm for
+        deciding when we've "stepped" into a new stack frame.
+        (map_args_over_tracepoints): loop over tracepoint list "safely", 
+       since list elements may be deleted during loop.
+       (read_actions): add actions to history list.
+
 Fri Jan  2 16:56:16 1998  Michael Snyder  (msnyder@cleaver.cygnus.com)
 [From Keith Seitz  (kseitz@cygnus.com)]
 
index f2c5160ce75d94cc2d33adcd3308c5afc9a10bf8..11e83d9675838574978d8e3dd0e5d43aa74fb66f 100644 (file)
@@ -617,12 +617,12 @@ map_args_over_tracepoints (args, from_tty, opcode)
      int from_tty;
      enum tracepoint_opcode opcode;
 {
-  struct tracepoint *t;
+  struct tracepoint *t, *tmp;
   int tpnum;
   char *cp;
 
   if (args == 0 || *args == 0) /* do them all */
-    ALL_TRACEPOINTS (t)
+    ALL_TRACEPOINTS_SAFE (t, tmp)
       tracepoint_operation (t, from_tty, opcode);
   else
     while (*args)
@@ -830,7 +830,11 @@ read_actions (t)
       if (readline_hook && instream == NULL)
        line = (*readline_hook) (prompt);
       else if (instream == stdin && ISATTY (instream))
-       line = readline (prompt);
+       {
+         line = readline (prompt);
+         if (line && *line)            /* add it to command history */
+           add_history (line);
+       }
       else
        line = gdb_readline (0);
 
@@ -1708,8 +1712,20 @@ finish_tfind_command (msg, from_tty)
     {
       int source_only;
 
-      if (old_frame_addr == FRAME_FP (get_current_frame ()) &&
-         old_func       == find_pc_function (read_pc ()))
+      /* NOTE: in immitation of the step command, try to determine
+        whether we have made a transition from one function to another.
+        If so, we'll print the "stack frame" (ie. the new function and
+        it's arguments) -- otherwise we'll just show the new source line.
+
+        This determination is made by checking (1) whether the current
+        function has changed, and (2) whether the current FP has changed.
+        Hack: if the FP wasn't collected, either at the current or the
+        previous frame, assume that the FP has NOT changed.  */
+
+      if (old_func       == find_pc_function (read_pc ()) &&
+        (old_frame_addr == 0 ||
+         FRAME_FP (get_current_frame ()) == 0 ||
+         old_frame_addr == FRAME_FP (get_current_frame ())))
        source_only = -1;
       else
        source_only =  1;