]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* stack.c (frame_command): If the frame level changed, issue
authorKeith Seitz <keiths@redhat.com>
Thu, 25 Jul 2002 17:15:55 +0000 (17:15 +0000)
committerKeith Seitz <keiths@redhat.com>
Thu, 25 Jul 2002 17:15:55 +0000 (17:15 +0000)
        a selected_frame_level_changed event.
        (up_command): Add selected_frame_level_changed event;
        (down_command): Likewise.

        * gdb-events.sh: Add selected_frame_level_changed event.
        * gdb-events.c: Regenerate.
        * gdb-events.h: Regenerate.

        * stack.c (print_frame_info_base): Always set current_source_symtab
        and current_source_line.

        * cli/cli-interp.c (cli_interpreter_exec): Pass from_tty=1 to
        gdb_execute_command.

gdb/ChangeLog
gdb/cli/cli-interp.c
gdb/gdb-events.c
gdb/gdb-events.h
gdb/gdb-events.sh
gdb/stack.c

index 6f63236bcc35861b3963953d9d1dbd0ae5ff197f..fbbe63bb950d85819f669c13cfcd4ca2db700420 100644 (file)
@@ -1,3 +1,20 @@
+2002-07-25  Keith Seitz  <keiths@redhat.com>
+
+       * stack.c (frame_command): If the frame level changed, issue
+       a selected_frame_level_changed event.
+       (up_command): Add selected_frame_level_changed event;
+       (down_command): Likewise.
+
+       * gdb-events.sh: Add selected_frame_level_changed event.
+       * gdb-events.c: Regenerate.
+       * gdb-events.h: Regenerate.
+       
+       * stack.c (print_frame_info_base): Always set current_source_symtab
+       and current_source_line.
+
+       * cli/cli-interp.c (cli_interpreter_exec): Pass from_tty=1 to
+       gdb_execute_command.
+
 2002-07-22  Keith Seitz  <keiths@redhat.com>
 
        * gdb-events.sh (register_changed_hook): Remove comment.
index 83d8469fb92169846b034b4858ecbd96cbdec3c1..0ce7aa157b7dcd4d01dc823a31a153b44a0b88d2 100644 (file)
@@ -100,7 +100,7 @@ cli_interpreter_exec (void *data, char *command_str)
      It is important that it gets reset everytime, since the user could
      set gdb to use a different interpreter. */
   old_stream = cli_out_set_stream (cli_uiout, gdb_stdout);
-  result = gdb_execute_command (cli_uiout, command_str, 0);
+  result = gdb_execute_command (cli_uiout, command_str, 1);
   cli_out_set_stream (cli_uiout, old_stream);
   return result;
 }
index 2f218f0d285935cfe08bc1ffee41d30a6c4cb42a..c451d4bf33654613b83e00e7d5bbdffb3bd1e637 100644 (file)
@@ -129,6 +129,16 @@ register_update_event (int regno)
   current_event_hooks->register_update (regno);
 }
 
+void
+selected_frame_level_changed_event (int level)
+{
+  if (gdb_events_debug)
+    fprintf_unfiltered (gdb_stdlog, "selected_frame_level_changed_event\n");
+  if (!current_event_hooks->selected_frame_level_changed)
+    return;
+  current_event_hooks->selected_frame_level_changed (level);
+}
+
 #endif
 
 #if WITH_GDB_EVENTS
@@ -162,6 +172,7 @@ enum gdb_event
   tracepoint_modify,
   architecture_changed,
   register_update,
+  selected_frame_level_changed,
   nr_gdb_events
 };
 
@@ -200,6 +211,11 @@ struct register_update
     int regno;
   };
 
+struct selected_frame_level_changed
+  {
+    int level;
+  };
+
 struct event
   {
     enum gdb_event type;
@@ -213,6 +229,7 @@ struct event
        struct tracepoint_delete tracepoint_delete;
        struct tracepoint_modify tracepoint_modify;
        struct register_update register_update;
+       struct selected_frame_level_changed selected_frame_level_changed;
       }
     data;
   };
@@ -300,6 +317,15 @@ queue_register_update (int regno)
   append (event);
 }
 
+static void
+queue_selected_frame_level_changed (int level)
+{
+  struct event *event = XMALLOC (struct event);
+  event->type = selected_frame_level_changed;
+  event->data.selected_frame_level_changed.level = level;
+  append (event);
+}
+
 void
 gdb_events_deliver (struct gdb_events *vector)
 {
@@ -352,6 +378,10 @@ gdb_events_deliver (struct gdb_events *vector)
          vector->register_update
            (event->data.register_update.regno);
          break;
+       case selected_frame_level_changed:
+         vector->selected_frame_level_changed
+           (event->data.selected_frame_level_changed.level);
+         break;
        }
       delivering_events = event->next;
       xfree (event);
@@ -372,6 +402,7 @@ _initialize_gdb_events (void)
   queue_event_hooks.tracepoint_modify = queue_tracepoint_modify;
   queue_event_hooks.architecture_changed = queue_architecture_changed;
   queue_event_hooks.register_update = queue_register_update;
+  queue_event_hooks.selected_frame_level_changed = queue_selected_frame_level_changed;
 #endif
 
   c = add_set_cmd ("eventdebug", class_maintenance, var_zinteger,
index 5d834b050b7d2737c583654e7acc0844c382732d..50b0d3910496297d7411e5ed18f65643745f8412 100644 (file)
@@ -60,6 +60,7 @@ typedef void (gdb_events_tracepoint_delete_ftype) (int number);
 typedef void (gdb_events_tracepoint_modify_ftype) (int number);
 typedef void (gdb_events_architecture_changed_ftype) (void);
 typedef void (gdb_events_register_update_ftype) (int regno);
+typedef void (gdb_events_selected_frame_level_changed_ftype) (int level);
 
 
 /* gdb-events: object. */
@@ -74,6 +75,7 @@ struct gdb_events
     gdb_events_tracepoint_modify_ftype *tracepoint_modify;
     gdb_events_architecture_changed_ftype *architecture_changed;
     gdb_events_register_update_ftype *register_update;
+    gdb_events_selected_frame_level_changed_ftype *selected_frame_level_changed;
   };
 
 
@@ -88,6 +90,7 @@ extern void tracepoint_delete_event (int number);
 extern void tracepoint_modify_event (int number);
 extern void architecture_changed_event (void);
 extern void register_update_event (int regno);
+extern void selected_frame_level_changed_event (int level);
 
 
 /* When GDB_EVENTS are not being used, completly disable them. */
@@ -101,6 +104,7 @@ extern void register_update_event (int regno);
 #define tracepoint_modify_event(number) 0
 #define architecture_changed_event() 0
 #define register_update_event(regno) 0
+#define selected_frame_level_changed_event(level) 0
 #endif
 
 /* Install custom gdb-events hooks. */
index 16657b9c7cec0ef79577c31d05aba6d36942c7b9..e4bf4b15cf9ceaae570c4d2ec84a362b82245bdb 100755 (executable)
@@ -66,6 +66,7 @@ f:void:tracepoint_delete:int number:number
 f:void:tracepoint_modify:int number:number
 f:void:architecture_changed:void
 f:void:register_update:int regno:regno
+f:void:selected_frame_level_changed:int level:level
 #*:void:annotate_starting_hook:void
 #*:void:annotate_stopped_hook:void
 #*:void:annotate_signalled_hook:void
@@ -101,7 +102,6 @@ f:void:register_update:int regno:regno
 #*:int:gdb_load_progress_hook:char *section, unsigned long num:section, num
 #*:void:pre_add_symbol_hook:char *name:name
 #*:void:post_add_symbol_hook:void
-#*:void:selected_frame_level_changed_hook:int level:level
 #*:int:gdb_loop_hook:int signo:signo
 ##*:void:solib_create_inferior_hook:void
 ##*:void:xcoff_relocate_symtab_hook:unsigned int
index fa5896395d6660f131c807c02553d9788fe3d2ea..432b8fa3df054af6d21cfa8d6657c63f4cc7bdeb 100644 (file)
@@ -398,6 +398,11 @@ print_frame_info_base (struct frame_info *fi, int level, int source, int args)
     print_frame (fi, level, source, args, sal);
 
   source_print = (source == SRC_LINE || source == SRC_AND_LOC);
+  if (sal.symtab)
+    {
+      current_source_symtab = sal.symtab;
+      current_source_line = sal.line;
+    }
 
   if (source_print && sal.symtab)
     {
@@ -410,10 +415,7 @@ print_frame_info_base (struct frame_info *fi, int level, int source, int args)
       if (!done)
        {
          if (print_frame_info_listing_hook)
-           {
-             print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0);
-             current_source_symtab = sal.symtab;
-           }
+           print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0);
          else
            {
              /* We used to do this earlier, but that is clearly
@@ -1638,9 +1640,12 @@ select_frame_command (char *level_exp, int from_tty)
 void
 frame_command (char *level_exp, int from_tty)
 {
+  int current_level = frame_relative_level (selected_frame);
   select_frame_command (level_exp, from_tty);
   show_and_print_stack_frame (selected_frame,
                              frame_relative_level (selected_frame), 1);
+  if (current_level != frame_relative_level (selected_frame))
+    selected_frame_level_changed_event (frame_relative_level (selected_frame));
 }
 
 /* The XDB Compatibility command to print the current frame. */
@@ -1688,6 +1693,7 @@ up_command (char *count_exp, int from_tty)
   up_silently_base (count_exp);
   show_and_print_stack_frame (selected_frame,
                              frame_relative_level (selected_frame), 1);
+  selected_frame_level_changed_event (frame_relative_level (selected_frame));
 }
 
 /* Select the frame down one or COUNT stack levels
@@ -1734,6 +1740,7 @@ down_command (char *count_exp, int from_tty)
   down_silently_base (count_exp);
   show_and_print_stack_frame (selected_frame,
                              frame_relative_level (selected_frame), 1);
+  selected_frame_level_changed_event (frame_relative_level (selected_frame));
 }
 \f
 void